[英]series of httpWebRequests
我当前正在编写一个简单的应用程序,该应用程序向Web服务器执行一系列请求,但遇到了奇怪的...功能?
我不需要请求的响应流,而只需要状态码。 因此,对于我的每条数据,我都调用自己的“发送”方法:
public static int Send(string uri)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
try
{
request = (HttpWebRequest)WebRequest.Create(uri);
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK) return 0;
}
catch (Exception e)
{
if (request != null) request.Abort();
}
return -1;
}
工作正常? 是的,除非我至少两次调用此函数。 连续第二次调用此函数(具有相同的uri)将始终导致超时。
现在,这很奇怪:如果我添加request.Abort();
当我返回零(在这里,当状态码为200时)-一切都正常。
所以我的问题是-为什么? 是某种框架限制,还是特定服务器上的某种反DOS保护(不幸的是,服务器对我来说是一个黑匣子)? 或者,也许我只是不了解其工作原理?
尝试处理Web响应,可能会泄漏一些资源
public static int Send(string uri)
{
HttpWebRequest request = null;
try
{
request = (HttpWebRequest)WebRequest.Create(uri);
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK) return 0;
}
}
catch (Exception e)
{
if (request != null) request.Abort();
}
return -1;
}
您还可以同时建立到域的默认连接数(我认为是2,但您可以配置它),请参阅此SO问题 。 您未完成的回复可能会达到此限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.