1

我们的应用程序服务器通过 net.tcp 传输公开了 5 个 WCF 服务,所有这些服务都在同一个端口上。在开发过程中,我们一直在使用 WcfSvcHost 托管这些,而我从未考虑过它们如何设法使用相同的端口。

我们现在将它们移动到 Windows 服务,现在我自己实例化 ServiceHost 实例。其中一项服务使用基于 Tcp 的 Streamed TransferMode。

使用带有 WcfSvcHost 的配置文件启动这些服务时,它们可以正常工作。但在我们的服务中,它抱怨端口正在使用中。

流服务是否可以使用相同的端口?

4

3 回答 3

2

在对绑定的编程配置进行了大量试验和错误之后,我最终解决了这个问题。

似乎在创建 a 时生成的绑定堆栈中的某些内容NetTcpBinding允许多个NetTcpBindings 共享一个端口。问题是我需要进行自定义绑定。

解决方案最终是创建一个基于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()));
于 2012-03-01T08:36:05.257 回答
1

我通过使用RoutingService类找到了解决此问题的另一种方法。每个合约仍然必须托管在它自己的ServiceHost中,但可以有一个RoutingService坐在所有合约之上 - 并将它们呈现在一个统一的“端点”上。我还写了一篇关于它的代码项目文章。示例代码也可以在Bitbucket上找到。

于 2012-02-29T23:46:45.710 回答
0

请参阅此处有关 Net.TCP 端口共享的信息,这就是您要查找的内容。

您也必须为此启用服务。

于 2011-09-30T11:30:04.800 回答