我有一个应用程序,创建了很多web请求来下载一个网站的新闻页面 (我已经测试了很多网站) 一段时间后,我发现应用程序减速在获取html源代码后,我发现HttpWebResonse无法获得响应。我只发布做这项工作的功能。HttpWebResonse挂在多个请求
public PageFetchResult Fetch()
{
PageFetchResult fetchResult = new PageFetchResult();
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(URLAddress);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Uri requestedURI = new Uri(URLAddress);
Uri responseURI = resp.ResponseUri;
if (Uri.Equals(requestedURI, responseURI))
{
string resultHTML = "";
byte[] reqHTML = ResponseAsBytes(resp);
if (!string.IsNullOrEmpty(FetchingEncoding))
resultHTML = Encoding.GetEncoding(FetchingEncoding).GetString(reqHTML);
else if (!string.IsNullOrEmpty(resp.CharacterSet))
resultHTML = Encoding.GetEncoding(resp.CharacterSet).GetString(reqHTML);
resp.Close();
fetchResult.IsOK = true;
fetchResult.ResultHTML = resultHTML;
}
else
{
URLAddress = responseURI.AbsoluteUri;
relayPageCount++;
if (relayPageCount > 5)
{
fetchResult.IsOK = false;
fetchResult.ErrorMessage = "Maximum page redirection occured.";
return fetchResult;
}
return Fetch();
}
}
catch (Exception ex)
{
fetchResult.IsOK = false;
fetchResult.ErrorMessage = ex.Message;
}
return fetchResult;
}
任何解决方案将不胜感激
感谢您的意见(volody,阿卡什卡瓦),我已经解决了我的代码,但是这不是我的问题(重定向是不是我的观点的原因,而是从未发生过它只是一个预防代码) 这个应用程序获取大约500个网页,然后它突然挂起,我不知道究竟是从哪里来的。 任何其他解决方案? – Ehsan 2010-05-16 05:15:15
这可能是线程问题,以及如何管理线程。你应该尝试.net 4.0的并行扩展,这可能会有所帮助,因为你的代码可能会有一些死锁,并行扩展可以通过改进的线程提供相同的逻辑。另外,它可能是你的防火墙阻止它认为它是某种攻击,并且每个域只允许同时允许最多2个http连接,所以我认为你应该按域对它们进行分组并将它们排队到一个域,这可能有助于。 – 2010-05-16 09:44:33