У меня есть приложение, которое создает много веб-запросов для загрузки страниц новостей на веб-сайте (я тестировал многие веб-сайты) через некоторое время выясняю, что приложение замедляется в извлечении 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
Это может быть проблема с потоками, и как вы управляете потоками. Вы должны попробовать параллельные расширения .net 4.0, которые могут помочь, поскольку ваш код может иметь тупик, параллельное расширение которого может обеспечить такую же логику с улучшенной потоковой обработкой. Кроме того, это может быть ваш брандмауэр, блокирующий его, думая, что это какая-то атака, а также каждый домен допускает одновременное одновременное подключение максимум 2 HTTP, поэтому я думаю, что вы должны группировать свои запросы по доменам и ставить их в очередь для одного домена, что может помочь , –