我需要帮助设置 .NET HttpWebRequest 超时
-
23-08-2019 - |
题
我的目标是在最短的时间内从多达 6000 个 URL 中获得答案。它运行得非常好(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 种可能的结果:
- 永远不会到达回调函数->超时回调函数
- 成功到达并应答
- 到达并引发异常
- 延迟 5 分钟,直到在回调函数内引发“时间限制”Web 异常
第四种可能性是延迟我的申请,我不知道如何缩短延迟
更新该方法是否有可能 GetResponseStream
而不是 GetResponse
是谁造成超时的?
解决方案
听起来您需要设置请求对象的 ReadWriteTimeout 属性。
其他提示
.Timeout = 尝试建立连接所花费的时间(不包括查找时间) .ReadWriteTimeout = 连接建立后尝试读取或写入数据所花费的时间
不隶属于 StackOverflow