3

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

我的代码最多同时使用 20 个 HttpWebRequest.BeginGetResponseThreadPool.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导致超时的人?

4

2 回答 2

4

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

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

于 2008-12-23T20:40:17.007 回答
1

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

于 2013-11-26T09:59:44.277 回答