第三次运行中GetResponse()的超时错误

时间:2015-08-12 10:42:44

标签: c# url httpresponse getresponse

我有一个每隔60秒定期运行的线程。这个帖子正在从网址获得响应。一切都很好,直到第三次运行。它不再起作用并显示此错误:

  

“操作已超时”

这是我在第5行找到的代码和错误。谢谢!

string sURL;
sURL = "http://www.something.com";
WebRequest wrGETURL;

wrGETURL = WebRequest.Create(sURL);
HttpWebResponse http = (HttpWebResponse)wrGETURL.GetResponse();

Stream objStream = null;
objStream = http.GetResponseStream();

2 个答案:

答案 0 :(得分:0)

您可能需要考虑使用using声明:

string sURL;
sURL = "http://www.something.com";

using (WebRequest wrGETURL = WebRequest.Create(sURL))
{
    using (HttpWebResponse http = (HttpWebResponse)wrGETURL.GetResponse())
    {
        Stream objStream = http.GetResponseStream();

        //etc.
    }
}

它保证调用Dispose方法,即使发生异常也是如此。 (https://msdn.microsoft.com/en-us/library/yh598w02.aspx

超时的原因可能是您的服务器有x个并发请求的限制。由于处理不当,连接将保持打开时间更长。虽然垃圾收集器会为你解决这个问题,但它的时机往往为时已晚。

这就是为什么我总是建议通过Dispose为所有实现using的对象调用IDisposable。当您在循环或低内存(低资源)系统中使用这些对象时尤其如此。

虽然小心流,然后他们倾向于使用装饰模式,并可能在其所有"孩子"上调用Dispose。对象。

通常适用于:

  • 图形对象
  • 数据库连接
  • TCP / IP(http等)连接
  • 文件系统访问
  • 使用本机组件的代码,例如usb驱动程序,网络摄像头等。
  • 流对象

答案 1 :(得分:0)

魔幻数字“ 3”来自here

  

ServicePoint对象允许的最大并发连接数。对于ASP.NET托管的应用程序,默认连接限制为10,对于所有其他应用程序,默认连接限制为2。