我创建了一个程序,该程序从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。

所以问题是-有什么方法可以减少超时时间?我要求的每个要求都是至关重要的。
我敢肯定,这与我经常查询相同的地址有关,但是可以肯定的是,有一种方法可以防止它...?

非常感谢!

最佳答案

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

应用配置

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

关于c# - 我在C#WebRequest上不断收到“超时”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4006540/

10-10 18:25
查看更多