Wcf 多个ServiceHost实例何时可以共享同一端口?

Wcf 多个ServiceHost实例何时可以共享同一端口?,wcf,net.tcp,wcf-hosting,Wcf,Net.tcp,Wcf Hosting,我们的应用服务器通过net.tcp传输公开了5个WCF服务,都在同一端口上。我们在开发过程中一直使用WcfSvcHost托管这些端口,我从来没有想过这些端口如何使用相同的端口 我们现在将它们移动到Windows服务,现在我自己实例化ServiceHost实例。其中一个服务使用Tcp上的流传输模式 当使用WcfSvcHost的配置文件启动这些服务时,它们工作正常。但在我们的服务中,它抱怨港口正在使用 流式服务是否可以使用相同的端口?请参阅您正在寻找的关于Net.TCP端口共享 您也必须为此服务。我

我们的应用服务器通过net.tcp传输公开了5个WCF服务,都在同一端口上。我们在开发过程中一直使用WcfSvcHost托管这些端口,我从来没有想过这些端口如何使用相同的端口

我们现在将它们移动到Windows服务,现在我自己实例化ServiceHost实例。其中一个服务使用Tcp上的流传输模式

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

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

请参阅您正在寻找的关于Net.TCP端口共享


您也必须为此服务。

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

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

创建
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()));

实际上,其他Tcp服务一直在共享一个没有该服务的端口。此外,在WcfSvcHost中托管时它是如何工作的?听起来很有趣!总有一天我会看看的。幸运的是,我已经设法解决了我遇到的问题。为此,我现在将发布一个答案。André,这个支持端口共享的自定义绑定是什么?您好,很抱歉延迟了响应。我换了工作,所以没有登录。关键是:我无法在同一端口上运行多个
CustomBinding
端点,即使它们似乎包含相同的元素。我必须通过在构造函数中传递
NetTcpBinding
来构建
CustomBinding
,然后修改它。