我有一个.NET控制台应用程序,可以批量上传到RESTful服务。我正在使用HttpClient
与服务进行通信。默认情况下,HttpClient
使用HttpWebRequest
进行连接。我一次做一个连接。当我接近4000个请求时,它们开始失败,给出错误解释 -
..系统缺少足够的缓冲区空间或因为队列已满。
我认为这是因为在我发出4000个请求之前,XP已经用完了短暂的端口。
在运行应用程序时查看netstat,我可以看到大约300个服务连接为“Established”。我一次只做一个连接。最终显然正在关闭连接,但是我应该做些什么来确保这些连接更快关闭?
查看活动连接,我可以看到每个请求都使用了新的临时端口。为了避免错误,有没有办法让HttpClient.PostAsync()
重用相同的短暂端口?我提出这么多请求的正确方法是什么?
当我一次只连接一个时我使用HttpClient.PostAsync()
的原因是我打算将它增加到2或3.我解决了这个问题时把它降到了1。
编辑:我已经能够通过增加Windows注册表中的临时端口范围来解决这个问题,但是我更愿意找到基于代码的解决方案,因为将来请求的数量会急剧增加。