Web请求超时

时间:2009-01-20 19:31:19

标签: c#

等待网络请求返回的合理时间是多少?我知道这可能是一个小问题,但我要做的就是验证网页是否可用。

也许有更好的方法?

try 
{ 
    // Create the web request 
    HttpWebRequest request = WebRequest.Create(this.getUri()) as HttpWebRequest;

    request.Credentials = System.Net.CredentialCache.DefaultCredentials;

    // 2 minutes for timeout
    request.Timeout = 120 * 1000;

    if (request != null)
    {
        // Get response 
        response = request.GetResponse() as HttpWebResponse;

        connectedToUrl = processResponseCode(response);
    }
    else
    {
        logger.Fatal(getFatalMessage());

        string error = string.Empty;
    }
} 
catch (WebException we) 
{ 
...
} 
catch (Exception e) 
{ 
...
} 

8 个答案:

答案 0 :(得分:5)

您需要考虑网络服务的消费者需要多长时间,例如如果要连接到数据库Web服务器并运行冗长的查询,则需要使Web服务超时超过查询所需的时间。否则,Web服务将(错误地)超时。

我也使用类似(消费者时间)+ 10秒的东西。

答案 1 :(得分:2)

Offhand我允许10秒,但这实际上取决于运行代码的网络连接类型。尝试在几天/几周内运行一些测试ping,看看典型的响应时间是什么。

答案 2 :(得分:2)

我会测量确实存在的页面响应所需的时间。如果它们都在大约相同的时间内响应,那么我会将超时时间设置为该数量的大约两倍。

答案 3 :(得分:2)

我想在很多时候添加自适应超时。可以是一个简单的指标,如:

period += (numTimeouts/numRequests > .01 ? someConstant: 0);

每当您达到超时时检查,以尝试将超时保持在1%以下(例如)。要小心减少它太低了:))

答案 4 :(得分:1)

等待Web请求的合理时间可能因服务器而异。如果服务器位于高延迟链路的远端,那么显然它需要的时间比在下一个房间的时间要长。但是两分钟似乎是服务器响应的充足时间。 PING命令的默认超时值以秒为单位,而不是分钟。我建议您查看网络实用程序(如PING或TRACERT)使用的超时值,以获取灵感。

答案 5 :(得分:1)

我只等待(MAX)30秒,可能接近15秒。这实际上取决于你在做什么以及连接失败的结果。我相信你知道有很多理由可以让你超时......

答案 6 :(得分:1)

我想这取决于两件事:

  • 网络速度/负载(正如其他人写的那样,使用ping可能会让你对此有所了解)
  • 您呼叫的页面类型:例如它是一个静态的HTML页面,还是一个可能会执行一些耗时的操作(数据库访问等)的页面。

无论如何,我认为2分钟是很多时间。 肯定会将超时时间减少到不到30秒。

答案 7 :(得分:1)

我意识到这并没有直接回答你的问题,但是对这个问题的“回答”有点难度。无论如何,我过去使用gomez来测量来自世界各地的页面加载时间的工具。它是免费的,如果您还没有进行过这种测试,那么它可能会帮助您确定某个给定位置的给定页面的典型页面加载时间。