MaxUserPort设置似乎被忽略

我的一个.NET应用程序在约1分钟的时间内发射约300个HTTP请求时,出现以下exception:

System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted 

我唯一能find的build议是调整HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的registry中的MaxUserPort设置。

尽pipe我已经将此设置设置为最大可能值,但仍会发生exception。

原来,还有一种方法可以使用netsh服务设置最大开放端口的限制。

您可以通过以下方式检查当前值:

 netsh int ipv4 show dynamicport tcp 

在我的情况下,它被设置为256.你可以很容易地改变它:

 netsh int ipv4 set dynamic tcp start=45000 num=10000 

不需要重新启动。

造成这个问题的原因是,即使你在.NET中正确地部署了HttpClient对象,套接字仍然保持TIME_WAIT状态一段时间。 因此,即使连接是连续的,但限制仍然是相关的。