【问题标题】:When can multiple ServiceHost instances share the same port?多个 ServiceHost 实例何时可以共享同一个端口?
【发布时间】:2011-09-30 11:27:03
【问题描述】:

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

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

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

流式服务应该可以使用同一个端口吗?

【问题讨论】:

    标签: wcf net.tcp wcf-hosting


    【解决方案1】:

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

    似乎在您创建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()));
    

    【讨论】:

    • André,这个自定义绑定支持端口共享的原因是什么?
    • 您好,很抱歉回复延迟。我换了工作,但没有登录 SO。重点是:我无法让多个CustomBinding 端点在同一个端口上运行,即使它们看起来包含相同的元素。我必须通过在构造函数中传递NetTcpBinding 来构建CustomBinding,然后对其进行修改。
    【解决方案2】:

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

    【讨论】:

    • 听起来很有趣!我得在某个时候看一下。幸运的是,我设法解决了我遇到的问题。为此,我现在将发布一个答案。
    【解决方案3】:

    请参阅here 了解有关 Net.TCP 端口共享的信息,这正是您所寻找的。​​p>

    您也必须为此服务enable

    【讨论】:

    • 实际上,其他 Tcp 服务一直在共享一个没有该服务的端口。此外,在 WcfSvcHost 中托管时它是如何工作的?
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2020-03-11
    • 2021-02-17
    相关资源
    最近更新 更多