VisualStudio 93

[WCF] Windows 서비스 호스팅을 사용하는 WCF 서비스 라이브러리

이 응용 프로그램을 샘플로 사용하면 누구나 WCF를 사용하여 n 계층 모델에서 응용 프로그램을 설계할 수 있습니다. 소개 일반적으로 우리는 WCF 서비스를 준비하고 IIS에서 호스트합니다. 이는 시스템 외부에서 서비스에 액세스하는 다른 클라이언트가 있을 때 유용합니다. 그러나 서비스가 로컬 시스템 클라이언트를 위한 것이라면 WCF 서비스를 Windows 서비스로 호스트하는 것이 좋습니다. 이 문서에서는 WCF 서비스를 만들고 Windows 서비스로 실행하는 방법을 살펴봅니다. 이 응용 프로그램을 샘플로 사용하면 누구나 WCF를 사용하여 n 계층 모델에서 응용 프로그램을 설계할 수 있습니다. 이를 위해 우리는 서비스가 한 위치에 상주하고 다른 위치에서 호스팅되고 다른 위치에서 소비되는 계층화된 아키텍처를 ..

VisualStudio/WCF 2023.01.03

[WCF] WCF - 프록시 사용이유

클라이언트가 서비스에 대한 메타 데이터를 알아낼 수 만 있다면 서비스 프록시를 만드는데 필요한 서비스 인터페이스를 생성할 수 있다. 왜냐면 서비스 메타 데이터에는 프록시가 요구하는 서비스의 계약, 바인딩, 주소 정보가 모두 포함되어 있기 때문이다. Hello World 서비스를 예로 들어 설명하자면, 서비스 호출에 필요한 것은 IHelloWorld 인터페이스이다. 이를 위해 우리는 서비스의 구현이 포함되었던 HelloWorldService 어셈블리를 클라이언트에서 "참조" 했었다. 이러한 서버 측 구현을 참조하는 것은 서비스 지향적인 관점에 어긋날 뿐만 아니라 닷넷이 아닌 클라이언트를 사용할 수 없다는 단점이 있다는 것은 이미 지적한 바와 같다. 그렇다면 클라이언트가 IHelloWorld 인터페이스에 대..

VisualStudio/WCF 2023.01.03

[C#서버] 실시간 서버 만드는 법 예제

지난 포스팅에서 패킷을 만들고, 클라이언트에서 패킷을 전송하는 것에 대해 살펴봤다. 이번에는 서버에서 그 패킷을 받아 응답하는 것을 하려고 한다. 2019/12/17 - [게임을 만들자/C# 서버] - c# 실시간 게임 서버 만들기 1 - 패킷 2019/12/19 - [게임을 만들자/C# 서버] - c# 실시간 게임 서버 만들기 2 - 클라이언트 1. 유저 접속 대기 서버 프로그램을 시작하면 우선적으로, 서버 소켓을 열고, 그 소켓에서 유저의 접속을 받는 것이다. 아래 코드에서 start함수부터 살펴 보면 된다. 유의할 점은, 유저 접속을 기다리는 부분이 메인 스레드가 아닌 서브 스레드에서 일어난 다는 것이다. '왜?'라는 생각이 들 수 있는데, 나는 [접속, 로직, db, http통신] 등에 대해서는 ..

[C#] 구조체 메모리 절감

들어가며 C++에 익숙한 사용자라면 class와 struct의 차이라고 해봐야 멤버에 대한 기본 접근한정이 private이냐 public이냐 정도차이 라고 알고 있을 것이다. 하지만 C#에서는 class와 struct의 차이가 매우 크다. 이 포스트에서는 C#에서 struct와 class에 대한 차이를 설명하고 struct를 이용해 많은 메모리를 절약한 시나리오에 대해 알아 보도록 하겠다. 메모리의 타입(유형) 코드에서 객체를 생성할 때 마다 객체는 어느 정도의 메모리를 필요하게 된다. 객체에 대한 메모리는 사용 중이 아닌 영역에 할 당되어야 하며, 이 할당 되어야 하는 메모리는 크게 '스택'과 '힙'이라는 두 가지 종류가 있다. 본론에 들어가기 앞서 이 두가지 유형의 메모리에 대해 간단히 살펴 보도록 ..

VisualStudio/C# 2023.01.03

[C#][개념] 제네릭 클래스

제네릭 클래스(Generic Class)란? 제네릭 클래스(Generic Class)는 클래스 내부의 멤버 변수의 데이터 타입을 일반화한 클래스입니다. 특정 타입에 국한되지 않고 모든 타입을 멤버 변수의 타입으로 설정할 수 있습니다. 제네릭 클래스를 사용하지 않고 멤버 변수의 타입을 object 타입으로 정의할 수 있지만, 안전한 방법이 아니며, 향후 문제가 발생할 가능성이 높기 때문에 좋은 방법은 아닙니다. 이번 포스팅에서는 일반 클래스로 멤버 변수의 타입이 여러개인 경우와 제네릭 클래스(Generic Class)에 대해 정리하였습니다. 목차 일반 클래스의 문제점 제네릭 클래스(Generic Class) 정리 일반 클래스의 문제점 public class IntClass { public int intMe..

VisualStudio/C# 2022.12.02

[C#서버] 서버 개발 순서

DNS부터 SEND 블록킹 방식으로 작성 Listener생성 Accept 논블록킹 Session생성 Recv 논블록킹(SetBuffer 초기값 생성) Send 논블록킹 (sendqueue, pandinglist, lock) Disconnected작성 (Interlock) Session클래스 abstract class로 변경 Onsend, OnRecv, OnConnected, OnDisconnected 구현 Listener AcceptComp를 Func로 Session을 생성하게 수정 Connector생성 Connect논블로킹 RecvBuffer생성 SegmentBuffer, writPos, readPos, FreeSize, DataSize, ReadBuffer, WriteBuffer 구현 Session클..