Comment envoyer une requête http dans asp.net sans attendre de réponse et sans bloquer les ressources
Dans un ASP.Net l'application, j'ai besoin d'envoyer des données (urlEncodedUserInput) via http POST à un serveur externe en réponse à une entrée utilisateur, sans tenir jusqu'à la page de réponse. Il n'a pas d'importance ce que la réponse de l'autre serveur, et je n'ai pas de soins si la requête échoue parfois. Cela semble fonctionner correctement (voir ci-dessous), mais je pense que c'est lier des ressources dans le fond d'attente pour une réponse qui ne sera jamais utilisé.
Voici le code:
httpRequest = WebRequest.Create(externalServerUrl);
httpRequest.Method = "POST";
httpRequest.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
bytedata = Encoding.UTF8.GetBytes(urlEncodedUserInput);
httpRequest.ContentLength = bytedata.Length;
requestStream = httpRequest.GetRequestStream();
requestStream.Write(bytedata, 0, bytedata.Length);
requestStream.Close();
Choses assez standard, mais généralement, à ce point que vous appelez httpRequest.getResponse() ou httpRequest.beginGetResponse() si vous vouliez recevoir la réponse de façon asynchrone, mais cela ne semble pas être nécessaire dans mon scénario.
Suis-je en train de faire la bonne chose? Dois-je appeler httpRequest.Abort() pour nettoyer ou cela pourrait-il empêcher que la requête soit envoyée sur une connexion lente?
source d'informationauteur Stuart Matheson
Vous devez vous connecter pour publier un commentaire.
Je pense que Threadpool.QueueUserWorkItem est ce que vous cherchez. Avec l'ajout de lambdas et les types anonymes, cela peut être très simple:
La seule façon que je peux penser à ce que vous obtenez un réponse rapide de la demande est d'avoir la page que vous affichez pour ouvrir un thread à l'aide de la ThreadPool.QueueUserWorkItem de sorte que le thread principal termine la réponse avant que le temps de travail est terminée. Vous devez savoir qu'une fois que le thread principal s'arrête, vous n'aurez pas accès à la HttpContext ce qui signifie pas de mise en cache, les variables de serveur, etc... également partagé les lecteurs ne fonctionnera pas à moins que vous Usurper l'identité d'un utilisateur avec les autorisations dans le nouveau thread. Les Threads sont sympa, mais il y a beaucoup de choses à regarder dehors pour.