我一直在C#WebRequest上遇到“Timed Out”错误

时间:2010-10-23 23:16:32

标签: c# httpwebrequest timeout

我创建了一个从HTTP请求加载数据的程序。 它必须每隔1秒或0.25秒加载

然而,我发现我的许多请求 - 每分钟都有一些 - 超时了。 这很奇怪,因为尝试在Web浏览器中重新加载相同的地址,即使经常重新加载,我总是快速获取内容。

这是我使用的代码:

        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
        myRequest.Method = "GET";
        myRequest.Timeout = 1500;
        myRequest.KeepAlive = false;
        myRequest.ContentType = "text/xml";
        WebResponse myResponse;
        try
        {
            myResponse = myRequest.GetResponse();
        }
        catch (Exception e)
        {
            return e.Message;
        }
        StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
        string result = sr.ReadToEnd();
        sr.Close();
        myResponse.Close();

我得到的错误是:

The operation has timed out

我尝试将keepalive设置为true和false。

所以问题是 - 有没有办法减少超时量?我要求的每个请求都至关重要。 我很确定这与我经常查询相同地址这一事实有关,但肯定有办法防止它......?

非常感谢!

2 个答案:

答案 0 :(得分:1)

有两种超时。客户端超时和服务器超时。在这里,您可以获得服务器超时,这可能是由于来自Web服务器的安全防御机制(IDS / IPS),因为它将模式(在一小段时间内来自单个IP的大量请求)识别为DoS(拒绝服务) )攻击然后你的IP被禁止一段时间。在这种情况下,像在代码中那样增加客户端超时是没有用的。 @Comment:关闭KeepAlive会使应用程序在每个请求上创建与Web服务器的新连接。也许这是您的代码与从浏览器运行javascript之间的巨大差异。将KeepAlive设置为true。

<强> App.Config中

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "1000" />
</connectionManagement>
</system.net>
</configuration>

答案 1 :(得分:1)

尝试将超时设置为 Timeout.Infinite

    var request = WebRequest.Create(url);
        request.Proxy = null;
        request.Timeout = Timeout.Infinite;
        string text = "";
        using (var response = (HttpWebResponse)request.GetResponse())
        {
            using (var sr = new StreamReader(response.GetResponseStream()))
            {
                text = sr.ReadToEnd();
            }
        }