【发布时间】:2012-02-21 02:27:46
【问题描述】:
我知道这个主题已经在 SO 上多次提出,但我找不到我正在寻找的关于 WCF 的预期连接延迟的确切答案。
基本上我有一个自托管的 WCF 服务(服务器),它在工厂环境中进行警报处理。这些警报的端到端延迟需要最小化,所以我正在研究连接时间。警报以不同的方式传递,其中之一是通过 netTcpBinding WCF 服务。 atm 的另一个服务应用程序(客户端)。在同一台服务器上运行正在使用服务器通过此绑定传递警报,通常效果很好。
我的问题是来自客户端的初始连接延迟,因为 IChannel.Open() 调用需要 100-500 毫秒。平均约 300 毫秒。通过 TCP/IP 在同一台服务器上创建连接似乎非常高。 (使用原始套接字进行快速测试,我得到了大约 1 毫秒的连接速度。)
在客户端中,我在启动时手动创建 ChannelFactory,并在需要发送警报时将其重用于“channelFactory.CreateChannel()”。在此之后,我明确地 Open() 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),看看是否有帮助。连接共享(尽管如上所述为绑定禁用)可能是问题吗?还有其他人研究过连接速度/延迟吗?
【问题讨论】: