C#:处理HttpWebResponse超时问题

Tal*_*ode 3 c# timeout httpwebresponse

处理我试图通过HttpWebResponse在我的应用程序中下载的数据时遇到了很大的问题.我的代码看起来像这样:

myWebRequest.Timeout = 10000; 

using (HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse())
{
     using (Stream ReceiveStream = myWebResponse.GetResponseStream())
     {
         Encoding encode = Encoding.GetEncoding("utf-8");
         StreamReader readStream = new StreamReader(ReceiveStream, encode);
         // Read 1024 characters at a time.
         Char[] read = new Char[1024];

         int count = readStream.Read(read, 0, 1024);

         int break_counter = 0;
         while (count > 0 && break_counter < 10000)
         {
             String str = new String(read, 0, count);
             buffer += str;
             count = readStream.Read(read, 0, 1024);
             break_counter++;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码在分离的线程中的几个实例中运行,因此调试有点困难.问题是这种方法卡住了,我把它归咎于与数据的连接不良.

正如您所看到的,我已经设置了超时,并且希望代码在超时时间到期后才会终止.它不是!至少不是所有的时间.有时我得到一个WebException/Timeout但有几次它只是卡住了.

什么是超时?什么时候打电话?让我们说HttpWebResponse开始接收数据,但它在传输过程中卡在某处.我有超时吗?对我来说,看起来我没有,因为我的应用程序也被卡住了,并且没有引发超时异常.

我可以做些什么来修补此问题,或者如何获得有关此处出现问题的更多信息?

Asa*_*sad 12

尝试设置HttpWebRequest.ReadWriteTimeout属性

写入或读取超时前的毫秒数.默认值为300,000毫秒(5分钟).

  • 我的意思是微软框架开发人员认为5分钟是个好主意?从我的观点来看,它是精神错乱.我把它设置为20秒,我的应用程序像梦一样运行.是的,我仍然得到超时但我稍后再试一次.什么都没有被卡住了. (3认同)