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

时间:2011-09-30 11:27:03

标签: wcf net.tcp wcf-hosting

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

我们现在将它们转移到Windows服务,现在我自己实例化ServiceHost实例。其中一项服务使用Streaming TransferMode而不是Tcp。

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

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

3 个答案:

答案 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)

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

你也必须enable提供服务。