WCF双工服务和TCP端口耗尽

时间:2008-11-13 05:58:34

标签: .net wcf web-services tcp duplex

我试图绕过这个。我正在制作一个特定于业务的消息传递应用程序,它将通过WCF将5000到10,000台机器连接回我们的数据中心(没有vpns,整个网络)。它主要用于警报,我需要能够将消息直接发送给特定客户端,WCF允许我使用双工合同完成所有这些操作,但是有了这么多客户端,它让我想到最大化TCP端口空间65535个端口。

我将假设所有入站连接都将通过我选择的任何端口进入,但是回到客户端的出口将分别占用一个端口。我很好奇,如果WCF端口共享服务做了什么来解决这个问题,或者它只有65535个端口到IP地址?就此而言,MSN Messenger等如何应对这种情况。当然,我可能永远不会达到它,但我至少会进入这个领域。

或者服务端的WCF双工合同是否在客户端期间保持端口打开以进行回调,还是将其释放?

4 个答案:

答案 0 :(得分:4)

在高开放/关闭交易环境中排除默认TCP堆栈仍然非常容易,例如套接字服务器提供非持久连接。

默认的TIME-WAIT延迟 - 套接字在被回收之前必须关闭的时间 - 这默认为90秒(如果我没记错的话)

要从我的其他线程中回收一些位 - 有一堆可以调整的注册表项 - 建议至少创建/编辑以下键

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

MSDN上的大量文档& Technet关于这些键的功能。 e.g。

  

http://technet.microsoft.com/en-us/library/cc776295.aspx

调整套接字服务器应用程序的这些密钥是很常见的,例如SQL,Biztalk,IIS等。

答案 1 :(得分:3)

我认为每个端口实际上是DestinationTCPAddress和端口号的组合 - 所以你不会用完。

即。您可以在同一源端口上与多个订户进行通信。这只是一个容量问题。

答案 2 :(得分:2)

如果这些连接都是并发的,那么您需要确保防火墙能够同时处理这么多连接。

状态防火墙需要记录通过它们的每个正在进行的连接,以便它们可以判断是否允许后续数据包。小型防火墙的会话限制数百个并不少见。

答案 3 :(得分:2)

通过源地址和目标地址,源端口,目标端口,连接是不同的(至少在IP层)。对最大连接数的某种操作系统限制可能会成为一个问题,但不要因为端口号本身是任何形式的限制而感到困惑。