2008-12-22 55 views
3

我的目标是在最短的时间内从多达6000个Url获得答案。它工作得非常好(5200个LAN地址为12秒),直到发生一些延迟。我需要帮助设置.NET HttpWebRequest超时

我的代码使用多达20个同步HttpWebRequest.BeginGetResponse与ThreadPool.RegisterWaitForSingleObject超时处理。

然而,有些请求(多达4个请求中的4个)从来没有用第二个参数(timedOut)为真来触发TimeoutCallback函数,他们浪费了我宝贵时间的5分钟,直到它们碰到BeginGetResponseCallback函数,然后引发WebException。例外情况表示“操作达到了时间限制”,但由于例外信息是葡萄牙语(我的母语),我无法Google。

我不知道我是否可以将这个时间限制减少到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分钟直到在回调函数内引发“时间限制”web异常

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

更新 有没有一种可能性,即代替GetResponse方法GetResponseStream是谁造成超时?

回答

2

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