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