Comment fermer des liens sous-jacents après la capture httpwebrequest délai d'attente
Mon asp.net demande d'envoi de httpwebrequest à distance RESTE du serveur et de l'attente de la réponse, et je l'ai trouvé il y a beaucoup de même un message d'erreur comme ceci:
Système.Net.WebException: L'opération a expiré. au
Système.Net.HttpWebRequest.GetResponse()
Est-ce possible qu'après que j'ai attraper cette exception et fermer le sous-jacent connexion http directement? ou je n'ai pas vraiment de le faire puisque je l'ai déjà mis keepalive pour de faux?
Grâce.
En fait une autre questions, si le délai d'exception toujours arrivé à System.Net.HttpWebRequest.GetResponse(),
que signifie l'application est en attente de la réponse du serveur distant et ne pouvait pas obtenir de réponse jusqu'à ce moment. ce qui pourrait être la raison possible, de la connexion réseau n'est pas stable? serveur distant a pas de réponse? toutes les autres raisons possibles?
Voici le code:
System.Net.HttpWebResponse httpWebResponse = null;
System.IO.Stream stream = null;
XmlTextReader xmlTextReader = null;
try
{
System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(request);
httpWebRequest.ReadWriteTimeout = 10000;
httpWebRequest.Timeout = 10000;
httpWebRequest.KeepAlive = false;
httpWebRequest.Method = "GET";
httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
stream = httpWebResponse.GetResponseStream();
xmlTextReader = new XmlTextReader(stream);
xmlTextReader.Read();
xmlDocument.Load(xmlTextReader);
//Document processing code.
//...
}
catch
{
//Catch blcok with error handle
}
finally
{
if (xmlTextReader != null)
xmlTextReader.Close();
if (httpWebResponse != null)
httpWebResponse.Close();
if (stream != null)
stream.Close();
}
vous l'avez dit, que la réponse n'résoudre votre problème ? des solutions de rechange ?
OriginalL'auteur machinegone | 2009-09-03
Vous devez vous connecter pour publier un commentaire.
La simple règle de base est que, si elle n'est pas mise en œuvre IDisposal alors il n'a pas besoin de disposer de.
Je pense que vous avez confiance en la Cadre de designers sur ce point. Découvrez stackoverflow.com/questions/716436/... pour plus d'info.
même si, en général, c'est vrai, il ne résout pas ce problème
OriginalL'auteur Dan Diplo
Aussi, vous pouvez augmenter le nombre de connexions sortantes dans la machine.config:
Changer le maxconnection attr à quelque chose de supérieur, voir:
http://www.williablog.net/williablog/post/2008/12/02/Increase-ASPNET-Scalability-Instantly.aspx
OriginalL'auteur Obiwan
Assurez-vous de disposer du bien comme de près.
Ou de l'utilisation à l'aide de blocs au lieu de essayez-enfin:
OriginalL'auteur Joe Chung
Une autre chose que vous pouvez faire est d'appeler la méthode Abort() sur un HTTPWebRequest qui a entraîné une erreur, comme:
OriginalL'auteur user152771