Question

Je reçois la réponse d'un HttpWebRequest (en utilisant une version modifiée wrappers CCR de Jeff Richter ), puis inspecter quelques-unes des en-têtes afin de décider si oui ou non de poursuivre le téléchargement. Parfois, je pourrais avoir besoin de ne pas continuer, je response.Close et request.Abort . Est-il nécessaire de publier GetResponseStream puis fermer le flux, ou est-ce implicite quand on appelle réponse .close ?

Après l'émission GetResponse, docs état :

  

Vous devez appeler la méthode Close pour fermer le flux et libérer la connexion. Le non-respect pourrait entraîner votre application à court de connexions.

Donc, cela signifie qu'une fois que nous avons une réponse, alors il est obligatoire pour obtenir le flux et le fermer?

Nous voyons des problèmes assez étranges où les téléchargements hung inondent finalement le système. Cela semble être le candidat le plus fort pour une fuite de ressources, mais se demander si quelqu'un d'autre a une expérience avec cette question.

En aparté: est-il sûr de GetResponseStream deux fois dans l'hypothèse qu'il est le même flux

?
Était-ce utile?

La solution

En fait, un appel à webResponse.Close () fermera le flux de réponse.

La réponse est IDisposable, je vous conseille une déclaration à l'aide.

Autres conseils

HttpWebResponse.Close implicitement ferme le flux de réponse.

De la documentation:

  

La méthode Close ferme le flux de réponse et libère la connexion à la ressource pour une réutilisation par d'autres requêtes

     

Vous devez appeler soit la Stream.Close ou la méthode HttpWebResponse.Close pour fermer le flux et libérer la connexion pour la réutilisation. Il ne faut pas appeler à la fois Stream.Close et HttpWebResponse.Close, mais cela ne cause pas une erreur. Le défaut de fermer le flux peut provoquer votre application à court de connexions.

Et pour votre question double GetResponseStream, bien que le documentation ne pas explicitement mention, il renvoie toujours le même objet courant, peu importe combien de fois vous l'appelez.

WCF Connexions

//Done with the service, let's close it.
try
{
   if (client.State != System.ServiceModel.CommunicationState.Faulted)
   {
      client.Close();
   }
}
catch (Exception ex)
{
   client.Abort();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top