J'ai une application qui crée de nombreuses requêtes Web pour télécharger les pages d'actualités d'un site Web (j'ai testé pour de nombreux sites Web) après un certain temps, je découvre que l'application ralentit En récupérant la source html, j'ai découvert que HttpWebResonse échouait à obtenir la réponse. Je poste seulement la fonction qui fait ce travail.HttpWebResonse se bloque sur plusieurs demandes
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;
}
toute solution apprécierait
Merci pour vos commentaires (volody, kava Akash), je l'ai fixé mon code, mais ce n'est pas mon problème (la redirection n'est pas mon point parce que c'est ne se produit jamais son juste une prévention code) cette application aller chercher environ 500 pages Web, puis il se bloque soudain je ne sais pas exactement ce qui vient. une autre solution? – Ehsan
Cela peut poser problème avec le threading, et comment gérez-vous le threading. Vous devriez essayer les extensions parallèles de .net 4.0, ce qui pourrait aider car votre code peut avoir une impasse dont l'extension parallèle peut fournir la même logique avec un thread amélioré. De plus, il se peut que votre pare-feu le bloque en pensant qu'il s'agit d'une attaque, et chaque domaine n'autorise que 2 connexions http simultanées, donc je pense que vous devriez regrouper vos requêtes par domaines et les mettre en file d'attente pour un domaine. . –