Question

Mon objectif est d'obtenir la réponse de jusqu'à 6000 urls dans les plus brefs délais. Il fonctionnait très bien (12 secondes pour 5200 adresses LAN) jusqu'à un certain retard a commencé à se produire.

Mon code utilise jusqu'à 20 HttpWebRequest.BeginGetResponse simultanée avec ThreadPool.RegisterWaitForSingleObject pour le traitement de délai d'attente.

Cependant, certains (jusqu'à 4 en 5000) des demandes ne jamais frapper la fonction TimeoutCallback avec le second paramètre (TimedOut) vrai, et ils perdent 5 minutes de mon temps précieux jusqu'à ce qu'ils atteignent theBeginGetResponseCallback fonction, puis soulever un WebException. Les exceptions dit quelque chose comme « l'opération a atteint la limite de temps », mais que le message d'exception est en portugais (ma langue maternelle) je ne pouvais pas le Google.

Je me demande si je peux réduire ce délai à 20 secondes par exemple. Tout le monde sait comment? Je l'ai déjà essayé:

<system.web>
    <httpRuntime executionTimeout="20"/>
</system.web>

Mais comme je suis en cours d'exécution comme une application console, les configurations ASP.NET ne fonctionnent pas. Et moi aussi essayé:

myHttpWebRequest.Timeout = 20*1000;

ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), AsyncState, 20*1000, true);

Sans succès. Pouvez-vous me aider?

Mise à jour Ce que je suis en train de dire est qu'il ya 4 résultats possibles pour une requête HTTP asynchrone:

  1. Ne jamais atteindre la fonction de rappel -> fonction de rappel de délai d'attente
  2. et réponses avec succès atteint
  3. touche et déclenche une exception
  4. Délai exactement 5 minutes jusqu'à déclencher une exception web « limite » à l'intérieur de la fonction de rappel

La 4e possibilité est celle retarde ma demande, et je ne sais pas comment raccourcir ce délai

Mise à jour Est-il possible que la méthode GetResponseStream au lieu du GetResponse est qui provoque le délai d'attente?

Était-ce utile?

La solution

On dirait que vous devez définir la propriété ReadWriteTimeout de l'objet de la demande.

http://blogs.msdn.com/buckh /archive/2005/02/01/365127.aspx

Autres conseils

.Timeout = le temps passé à essayer d'établir une connexion (sans compter le temps de recherche) .ReadWriteTimeout = le temps passé à essayer de lire ou écrire des données après la connexion établie

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top