2011-09-30 5 views
1

우리 응용 프로그램 서버는 같은 포트에있는 net.tcp 전송을 통해 5 개의 WCF 서비스를 제공합니다. 우리는 WcfSvcHost를 사용하는 개발 과정에서 이들을 호스팅 해 왔으며 이러한 포트가 동일한 포트를 어떻게 사용하는지 생각할 필요가 없었습니다.여러 ServiceHost 인스턴스가 언제 같은 포트를 공유 할 수 있습니까?

지금은 Windows 서비스로 이동하고 있으며 이제는 ServiceHost 인스턴스를 직접 인스턴스화합니다. 서비스 중 하나는 Tcp를 통한 Streamed TransferMode를 사용합니다.

WcfSvcHost가있는 구성 파일을 사용하여 이러한 서비스를 시작하면 정상적으로 작동합니다. 그러나 우리의 서비스에서 그것은 사용중인 항구에 대해 불평합니다.

스트리밍 된 서비스가 동일한 포트를 사용할 수 있습니까?

답변

2

바인딩을 프로그래밍 방식으로 구성하여 시행 착오를 겪은 끝에 결국 문제가 해결되었습니다.

NetTcpBinding을 생성 할 때 생성되는 바인딩 스택에서 무언가가 여러 개의 NetTcpBinding이 포트를 공유 할 수 있습니다. 문제는 맞춤 바인딩을해야한다는 것이 었습니다.

솔루션NetTcpBinding에 따라 를 사용자 지정 바인딩을 만들 었죠. 예 :

 var lBinding = new NetTcpBinding() 
     { 
      SendTimeout = TimeSpan.FromMinutes(5), 
      ReceiveTimeout = TimeSpan.FromMinutes(5), 

      MaxConnections = 100, 
      ReliableSession = new OptionalReliableSession 
      { 
       Enabled = true, 
       Ordered = true, 
       InactivityTimeout = TimeSpan.FromMinutes(30) 
      }, 
      Security = new NetTcpSecurity 
      { 
       Mode = SecurityMode.TransportWithMessageCredential, 
       Message = new MessageSecurityOverTcp { ClientCredentialType = MessageCredentialType.UserName } 
      }, 
      MaxReceivedMessageSize = 524288 
     }; 

     var lCustomBinding = new CustomBinding(lBinding); 

     // Edit the custom binding elements here 

     var lEndpoint = new ServiceEndpoint(lContract, lCustomBinding, new EndpointAddress(pServiceHost.BaseAddresses.First())); 
+0

André, 포트 공유를 사용할 수있는이 사용자 정의 바인딩은 무엇입니까? – shambulator

+0

안녕하세요, 지연된 응답에 대해 사과드립니다. 나는 일자리를 바꾸었고 SO에 로그인하지 않았습니다. 요점은 이렇습니다 : 동일한 요소를 포함하고있는 것처럼 보일지라도 동일한 포트에서 여러 개의 CustomBinding 엔드 포인트를 실행할 수 없습니다. 생성자에'NetTcpBinding'을 전달한 다음 그것을 수정하여'CustomBinding'을 구현해야했습니다. –

0

찾고있는 Net.TCP 포트 공유에 대해 here을 참조하십시오.

enable 서비스도 있습니다.

+0

실제로 다른 Tcp 서비스는 해당 서비스가없는 포트를 공유하고 있습니다. 또한 WcfSvcHost에서 호스팅 될 때 어떻게 작동합니까? –

1

RoutingService 클래스를 사용하여이 문제에 대한 다른 해결책을 발견했습니다. 각 계약서는 여전히 자신의 ServiceHost이라는 이름으로 호스트되어야하지만, 모두 위에 놓여진 RoutingService이있을 수 있으며 통합 된 "끝점"을 통해 제시 할 수 있습니다. 나는 그것에 대해서도 codeproject article을 썼다. 예제 코드는 Bitbucket에서도 사용할 수 있습니다.

+0

재미있는 소리! 나는 그 점을 어느 시점에서 살펴보아야 할 것이다. 운 좋게 나는 가지고있는 문제를 해결할 수 있었다. 지금 그 대답을 게시 할 것입니다. –