【问题标题】:I need help setting .NET HttpWebRequest timeout我需要帮助设置 .NET HttpWebRequest 超时
【发布时间】:2010-09-28 02:02:48
【问题描述】:

我的目标是在最短的时间内从多达 6000 个网址中得到答案。它运行良好(5200 个 LAN 地址需要 12 秒),直到开始出现一些延迟。

我的代码最多同时使用 20 个 HttpWebRequest.BeginGetResponse 和 ThreadPool.RegisterWaitForSingleObject 进行超时处理。

但是,有些请求(最多 5,000 个中的 4 个)从未在第二个参数 (timedOut) 为 true 的情况下到达 TimeoutCallback 函数,并且它们浪费了我 5 分钟的宝贵时间,直到它们到达 BeginGetResponseCallback 函数并引发 WebException。异常显示类似于“操作已达到时间限制”,但由于异常消息是葡萄牙语(我的母语),我无法谷歌搜索。

我想知道我是否可以将此时间限制减少到例如 20 秒。有谁知道怎么做?我已经试过了:

<system.web>
    <httpRuntime executionTimeout="20"/>
</system.web>

但是当我将它作为控制台应用程序运行时,ASP.NET 配置不起作用。我也试过了:

myHttpWebRequest.Timeout = 20*1000;

ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), AsyncState, 20*1000, true);

没有成功。你能帮帮我吗?

更新 我想说的是异步 HTTP 请求有 4 种可能的结果:

  1. 永远无法到达回调函数 -> 超时回调函数
  2. 成功到达并回答
  3. 到达并引发异常
  4. 恰好延迟 5 分钟,直到在回调函数中引发“时间限制”网络异常

第四种可能是我的申请延迟了,我不知道如何缩短延迟

更新 是否有可能是方法GetResponseStream 而不是GetResponse 是导致超时的原因?

【问题讨论】:

    标签: .net timeout webrequest


    【解决方案1】:

    听起来您需要设置请求对象的 ReadWriteTimeout 属性。

    http://blogs.msdn.com/buckh/archive/2005/02/01/365127.aspx

    【讨论】:

    • 谢谢,也许这就是解决方案。但是因为我必须等到问题再次出现才能测试它。
    • 您在下面帖子中的评论一针见血。异步 Web 请求会忽略 timeout 属性。因此,除非您滚动了自己的异步超时事件,否则 Web 请求的超时将基于 ReadWriteTimeOut 而不是 webrequest 超时。
    • 可以在标准 MS 配置文件中设置默认值吗?
    【解决方案2】:

    .Timeout = 尝试建立连接所花费的时间(不包括查找时间) .ReadWriteTimeout = 建立连接后尝试读取或写入数据所花费的时间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      相关资源
      最近更新 更多