2011-09-30 42 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

请参阅here关于Net.TCP端口共享,这是您正在寻找。

您必须为enable服务。

+0

其实,其他Tcp服务已经共享一个没有该服务的端口。此外,在WcfSvcHost中托管时它是如何工作的? –

1

我发现了另一个解决方案,通过使用类RoutingService这个问题。每个合约仍然必须在其自己的ServiceHost中进行托管,但是可以在所有这些合同上面放置一个RoutingService,并通过统一的“端点”呈现它们。我还写了一个关于它的codeproject article。示例代码也可在Bitbucket上获得。

+0

听起来有趣!我不得不在某个时候看看。幸运的是,我设法解决了我遇到的问题。为此,我现在会发布一个答案。 –

相关问题