C# HttpWebRequest.AllowAutoRedirect=false是否会导致超时?

C# HttpWebRequest.AllowAutoRedirect=false是否会导致超时?,c#,.net,redirect,httpwebrequest,C#,.net,Redirect,Httpwebrequest,我需要测试大约300个URL,以验证它们是否指向实际页面或重定向到其他页面。我在.NET2.0中使用HttpWebRequest编写了一个简单的应用程序来检查它。下面是代码片段: System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create( url ); System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse

我需要测试大约300个URL,以验证它们是否指向实际页面或重定向到其他页面。我在.NET2.0中使用HttpWebRequest编写了一个简单的应用程序来检查它。下面是代码片段:

System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create( url );
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)wr.GetResponse();
code = resp.StatusDescription;
代码运行速度很快,并写入文件,使我的所有URL返回状态200OK。然后我意识到默认情况下GetResponse()遵循重定向。我真傻!因此,我添加了一行以使其正常工作:

System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create( url );
wr.AllowAutoRedirect = false;
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)wr.GetResponse();
code = resp.StatusDescription;

我再次运行程序并等待。。。等待。。。等待。。。事实证明,对于每个url,我都会得到一个System.Net.WebException“操作已超时”。很惊讶,我手动检查了URL-工作正常。。。我注释掉了AllowAutoRedirect=false行-它再次正常工作。未注释此行-超时。有什么想法可能导致这个问题以及如何解决吗?

通常超时是由于没有处理web响应。对于
HttpWebResponse
,您应该有一个
using
语句:

using (HttpWebResponse resp = (HttpWebResponse)wr.GetResponse())
{
    code = resp.StatusDescription;
    // ...
}
我们需要做更多的分析来预测这是否确实是问题所在。。。或者你可以试试:)


原因是.NET有一个连接池,如果不关闭响应,连接不会返回到该池(至少在GC完成响应之前)。这会导致请求在等待连接时挂起。

不知道为什么它在没有AllowAutoRedirect=false的情况下工作正常,也不知道它是如何在第一次请求时知道我无法正确关闭它的,但这很有帮助@perpetka:当它重定向时,它可能正在关闭原始连接,并且有足够多的不同主机可以重定向到它避免了问题。这是有道理的。非常感谢你的帮助!