我需要帮助设置.NET HttpWebRequest超时

时间:2008-12-22 20:24:43

标签: .net timeout webrequest

我的目标是在最短的时间内从最多6000个网址获得答案。它工作得非常好(5200局域网地址为12秒),直到一些延迟开始发生。

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

然而,有些(最多4个,每5,000个)请求从未使用第二个参数(timedOut)为true来触发TimeoutCallback函数,并且它们浪费了我宝贵时间的5分钟,直到它们点击了theBeginGetResponseCallback函数然后引发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. 永远不会达到回调功能 - &gt;超时回调函数
  2. 成功到达并回答
  3. 达到并引发异常
  4. 延迟5分钟,直到在回调函数
  5. 中引发“时间限制”Web异常

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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