netTcpBinding的WCF连接速度较慢



我知道这个主题在SO上已经提过很多次了,但我找不到关于WCF预期连接延迟的确切答案。

基本上,我有一个自托管的WCF服务(服务器),它在工厂环境中进行警报处理。这些警报的端到端延迟需要最小化,所以我正在研究连接时间。警报以不同的方式传递,其中之一是通过netTcpBinding WCF服务。另一个服务应用程序(客户端)。正在同一台服务器上运行,正在使用服务器通过此绑定传递警报,通常效果良好。

我的问题是来自客户端的初始连接延迟,因为IChannel.Open()调用需要100-500毫秒,平均约300毫秒。对于通过TCP/IP在同一服务器上创建连接来说,这似乎非常高。(使用原始插座进行快速测试,我的连接速度约为1ms。)

在客户端中,我在启动时手动创建ChannelFactory,并在需要发送警报时将其重新用于"ChannelFactory.CreateChannel()"。在这之后,我显式地打开了IChannel(),这是我担心的时间。该服务发送一批警报,然后关闭并处理IChannel。快速重新连接需要0毫秒,但从警报到"长时间"暂停后重新打开通常需要3-5分钟,考虑到我在没有安全等功能的情况下运行以进行测试,这很慢。

我的绑定配置非常基本:

<binding name="AlarmService_NetTcpBindingConfig"
            hostNameComparisonMode="StrongWildcard"
            closeTimeout="00:01:00"
            portSharingEnabled="false"
            listenBacklog="20"
            maxConnections="50"
            transactionFlow="false"
            transferMode="Buffered"
            >
    <security mode="None">
        <message clientCredentialType="None" />
        <transport clientCredentialType="None" protectionLevel="None" />
    </security>
    <reliableSession enabled="false" />
</binding>

因此,基本上的问题(除了贩卖挫折:))是,这是否是我通过WCF netTcpBinding可以预期的连接延迟?

我能想到的唯一一件我还没有尝试过的事情是遵循"配置Net.TCP端口共享服务"这篇文章(http://msdn.microsoft.com/en-us/library/aa702669.aspx)看看这是否有帮助。连接共享(尽管如上所述对绑定禁用)会是问题吗?还有人研究过连接速度/延迟吗?

您可以尝试代理池。这是的样本

如果您在IIS上托管nettcp端口共享服务,则必须启动该服务。它允许您在多个wcf服务之间共享一个端口。我认为这与打开通道的性能无关

最新更新