2009-08-12 7 views
0

J'ai défini à la fois Timeout et ReadWriteTimeout de HttpWebRequest, et toujours GetRequestStream ne expire pas en essayant de se connecter à un serveur inexistant. J'ai rencontré des problèmes similaires dans le passé lorsque la résolution DNS a été atteinte, mais cette fois le serveur en question fonctionne sur ma propre machine (localhost) donc ce n'est pas pertinent.Comment puis-je définir un délai d'attente sur HttpWebRequest.GetRequestStream?

Le scénario est le suivant:

  1. Je lève mon serveur
  2. je me connecte avec succès à lui, effectuer un POST et fermer le flux de demande/réponse
  3. Je tue le serveur
  4. I essayer de se connecter à nouveau, et s'attendre à ce que je vais frapper le délai que j'ai mis

À ce stade, le thread se bloque. J'ai essayé de définir KeepAlive sur false, mais cela n'a pas aidé. J'ai pensé à exécuter le scénario ci-dessus dans un fil séparé, et si cela prend trop de temps à le tuer moi-même - cependant cette solution est très moche et n'empêchera pas les fuites de ressources.

Répondre

5

Essayez d'utiliser BeginGetRequestStream et EndGetRequestStream au lieu de GetRequestStream. Configurez une minuterie et appelez EndGetRequestStream prématurément après que le temps s'est écoulé que vous supposez que la demande va se bloquer. Évidemment, vous devez également appeler EndGetRequestStream dans le délégué passé à BeginGetRequestStream si vous traitez la requête normalement, donc il doit y avoir une certaine synchronisation entre les deux threads pour éviter d'appeler EndGetRequestStream deux fois.

+0

Bien sûr, je ne sais pas comment j'ai raté celui-ci :) – ripper234

Questions connexes