【问题标题】:C# : Dealing with HttpWebResponse timeout problemsC#:处理 HttpWebResponse 超时问题
【发布时间】:2010-03-17 13:04:04
【问题描述】:

我在处理尝试通过互联网通过 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++;
         }
    }
}

这段代码在几个单独的线程中运行,所以调试起来有点困难。问题是这种方法卡住了,我将其归咎于与数据的连接不佳。

如您所见,我已经设置了超时,并希望代码在超时时间到期后终止。它不是!至少不是一直。有时我会收到 WebException/Timeout,但有几次只是卡住了。

究竟什么是超时?什么时候叫? 假设 HttpWebResponse 开始接收数据,但在传输过程中卡住了。我会超时吗?对我来说,看起来我没有,因为我的应用程序也卡住了,并且没有引发超时异常。

我可以做些什么来修补这个问题,或者我怎样才能获得关于这里出了什么问题的更多信息?

【问题讨论】:

    标签: c# timeout httpwebresponse


    【解决方案1】:

    尝试设置HttpWebRequest.ReadWriteTimeout Property

    之前的毫秒数 写或读超时。这 默认值为 300,000 毫秒 (5 分钟)。

    【讨论】:

    • 我进行了测试,目前看起来非常非常好。谁将默认设置为 5 分钟?
    • 我不明白你的问题。 default 是一个值,通常在 variable 被“初始化”时设置(并非在所有情况下),除非用户在上面的示例中更改。
    • 我的意思是 Microsoft 框架开发人员认为 5 分钟是个好主意?从我的角度来看,这是精神错乱。我将它设置为 20 秒,我的应用程序像梦一样运行。是的,我仍然会超时,但我稍后再试一次。什么都没有了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2010-10-08
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多