1
3
1) 您使用的是异步WebRequests吗? 2) 您的web服务调用是否长期存在(意味着它们需要很长时间才能完成?) 4) REST服务在哪里托管?与asp.net应用程序的计算机相同还是不同? 当请求进入ASP.NEt服务器时,它将在线程池线程上处理。我不确定这是一个完成端口线程还是一个线程池线程。 无论如何,您的应用程序正在线程池线程上调用。在这个线程上,您正在发出一个出站HTTPWebRequest(HWR)。如果此请求是同步的,则不应占用任何额外线程。但是,如果它是异步的,则需要池中的另一个线程才能完成。 现在,如果您所做的HWR返回到同一服务器,并且该请求需要同一服务器上的另一个线程来完成,那么您现在需要另外一个线程。再加上Webservice需要很长时间,每个请求至少占用2个(最多3个)线程。如果您向asp.net服务器发出大量请求,服务器会很快达到最大线程池线程限制。 到目前为止,我假设您的代码中没有逻辑错误,并且您正确地处理了HttpWebResponse对象。 因此,当没有线程来完成工作时,HttpWebRequest会引发超时异常。 如果您的后端webservice调用是在同一台计算机上进行的,并且您没有将ServicePointManager.DefaultConnectionLimit增加到适合您的场景的合理值,也可能会发生这种情况。例如,如果您的asp.net应用程序预期同时遇到200个请求,则应设置DefaultConnectionLimit=200+一些合理的缓冲区。连接池中缺少连接也会导致此问题。 解决方案: 我会先设置默认连接限制。如果这不能解决问题,那么您需要监视ASP.NET性能计数器,并查看.NET线程池是否已耗尽,这可能导致webrequests失败。 |
Haim Ohayon · 这些链接之间有什么区别? 2 年前 |