如何在大量使用时阻止HttpClient.PostAsync耗尽所有的ephemoral端口?

时间:2012-04-26 13:23:52

标签: .net rest .net-4.0 dotnet-httpclient

我有一个.NET控制台应用程序,可以批量上传到RESTful服务。我正在使用HttpClient与服务进行通信。默认情况下,HttpClient使用HttpWebRequest进行连接。我一次做一个连接。当我接近4000个请求时,它们开始失败,给出错误解释 -

  

..系统缺少足够的缓冲区空间或因为队列已满。

我认为这是因为在我发出4000个请求之前,XP已经用完了短暂的端口。

在运行应用程序时查看netstat,我可以看到大约300个服务连接为“Established”。我一次只做一个连接。最终显然正在关闭连接,但是我应该做些什么来确保这些连接更快关闭?

查看活动连接,我可以看到每个请求都使用了新的临时端口。为了避免错误,有没有办法让HttpClient.PostAsync()重用相同的短暂端口?我提出这么多请求的正确方法是什么?

当我一次只连接一个时我使用HttpClient.PostAsync()的原因是我打算将它增加到2或3.我解决了这个问题时把它降到了1。

编辑:我已经能够通过增加Windows注册表中的临时端口范围来解决这个问题,但是我更愿意找到基于代码的解决方案,因为将来请求的数量会急剧增加。

0 个答案:

没有答案