NetTcpBinding 을 위한 WCF 서비스의 구성

Midnight Peach 2012. 5. 27. 04:07

지난 포스트에서 이야기한 것과 같이 MP에는 WCF 서비스 코드와 그를 호출하는 코드를 생성하는 기능이 있습니다.

지난 포스트에서는 BasicHttpBinding 바인딩을 사용하는 사용했었는데, 오늘은 NetTcpBinding 을 사용하는 방법에 대해서 이야기를 해보겠습니다.

 

0. IIS 의 구성

BasicHttpBinding 은 IIS 에서 기본적으로 지원하지만, NetTcpBinding 은 별도의 호스팅 애플케이션이 필요합니다.

하지만 IIS 7.0 부터는 IIS 에서 HTTP 이외의 바인딩도 직접 호스팅하는 기능이 포함되어 있습니다.

IIS 에서 NetTcpBinding 을 지원하기 위해서는 먼저 이 글의 설명대로 IIS 를 구성하여야 합니다.

위 링크의 4번 단계 까지만 진행하고 나머지는 본 포스트의 설명을 계속 읽어주십시오.

 

1. web.config 파일 설정

지난 포스트에서 만든 Memopad 솔루션을 계속 예제로 사용하겠습니다.

MP가 생성한 Memopad.Service 프로젝트의  MemopadDataService.svc 파일을 열어 보면 마지막에 web.config 용 샘플이 생성되어 있습니다.

그 중에서 NetTcpBinding 부분을 복사하여 아래와 같이 web.config 파일에 붙여넣습니다.

바인딩의 여러 속성이 최대값으로 지정이 되어 있는데, 실 서버에 배포하기 전에는 적당히 조정을 하여야 합니다.

 

2. 서비스 클라이언트의 구성

Memopad.Biz 프로젝트의 Biz.cs 파일에는 역시 WCF 서비스 클라이언트용의 샘플 코드가 있습니다.

지난 번에 설명한대로 ServiceFactory 클래스를 만들고 위 샘플 코드에서 아래와 같은 두 메서드를 복사합니다.

주소가 localhost 로 되어 있는데, NetTcpBinding 은 BasicHttpBinding 과 달리 비주얼 스튜디오의 내장 웹 서버가 호스팅 할 수가 없습니다.

따라서 별도의 호스트 애플리케이션을 만들어야 하는데, 자세한 설명은 MSDN의 설명을 참고하십시오.

여기서는 실 서버의 IIS 에 호스팅하는 예를 보이겠습니다.

 

3. 서비스의 게시

솔루션 탐색기에서 Memopad.Service 프로젝트를 우클릭하고 게시를 선택합니다.

실서버에 서비스를 게시할 수 있는 방법을 지정하여야 하는데, 여기서는 FTP 를 사용하였습니다.

FTP 의 주소는 적절한 값으로 설정하시기 바랍니다.

여기서는 ftp://실서버의 IP/Memopad.Service 라고 설정하였습니다.

게시가 끝났으면 실서버에서 IIS 관리자를 실행한 후 방금 게시된 가상 디렉토리를 응용 프로그램으로 변환하여야 합니다.

이 때 주의할 점은 응용 프로그램 풀이 Memopad.Service 가 사용하는 닷넷프레임웍 버전을 지원하여야 한다는 것입니다.

이 예제에서는 Memopad.Service 가 닷넷프레임웍 4.0을 사용하므로 닷넷프레임웍 4.0 응용 프로그램 풀을 지정하였습니다.

마지막으로 위 응용 프로그램이 NetTcpBinding 을 지원하도록 설정하여야 합니다.

위 응용 프로그램의 고급 설정 창을 연 후, 사용할 수 있는 프로토콜을 아래와 같이 설정합니다.

이제 IIS 설정이 모두 끝났습니다.

다시 Memopad.Biz 프로젝트로 돌아가 (사용자가 생성한) ServiceFactory 클래스를 열어 WCF 서비스의 주소를 방금 게시한 주소를 변경합니다.

net.tcp://실서버의 IP/Memopad.Service/MemopadDataService.svc 와 같은 식으로 지정하면 됩니다.

 

4. 테스트

모든 작업을 마쳤으니 제대로 동작하는지 테스트를 해봅시다.

Memopad.TestConsole 프로젝트의 Program.cs 파일에 아래와 같은 코드를 작성합니다.

예외가 발생하지 않고 정수가 출력되면 모든 것이 정상입니다.

복습 삼아 지난 시간에 한 이야기를 다시 하자면, Memopad.Biz 프로젝트의 등록정보에서 ForService 라는 기호가 정의되어 있을 때에만 WCF 서비스를 호출합니다.

(정의되어 있지 않으면 서비스를 호출하는 대신 DB에 바로 접속합니다.)

따라서, Memopad.Biz 프로젝트에 ForService 가 정의되어 있고, Memopad.TestConsole 프로젝트의 app.config 파일에 DB 연결문자열이 없는 상태에서,

위 Program.cs 파일의 테스트 코드가 작동한다면, WCF 서비스가 제대로 구축되어 있다고 할 수 있겠습니다.

본 포스트의 샘플 파일 :

Memopad.zip

: