我们的应用程序服务器通过net.tcp传输公开5个WCF服务,所有这些服务都在同一个端口上。我们在使用WcfSvcHost开发期间一直在托管这些,我从来没有考虑过如何使用相同的端口。
我们现在将它们转移到Windows服务,现在我自己实例化ServiceHost实例。其中一项服务使用Streaming TransferMode而不是Tcp。
使用带有WcfSvcHost的配置文件启动这些服务时,它们可以正常工作。但在我们的服务中,它抱怨正在使用的端口。
流式服务是否可以使用相同的端口?
答案 0 :(得分: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()));
答案 1 :(得分:1)
我通过使用RoutingService类找到了解决此问题的另一种解决方案。每个合同仍然必须在其自己的ServiceHost
中托管,但可以在所有合同之上放置RoutingService
- 并通过统一的“端点”呈现它们。我还写了一篇关于它的codeproject article。示例代码也可以在Bitbucket上找到。
答案 2 :(得分:0)