L'hôte distant a fermé la connexion. Le code d'erreur est 0x800704CD

je reçois des e-mails d'erreur de mon site Web chaque fois qu'une exception se produit. Je reçois cette erreur:

L'hôte distant a fermé la connexion. Le code d'erreur est 0x800704CD

et je ne sais pas pourquoi. Je reçois environ 30 par jour. Je ne peux pas reproduire l'erreur ne peut donc pas suivre le problème.

site web est ASP.NET 2 sur IIS7.

trace de la Pile:

à Système.Web.Accueillir.IIS7WorkerRequest.RaiseCommunicationError(Int32 résultat, boolean throwOnDisconnect) à Système.Web.Accueillir.IIS7WorkerRequest.ExplicitFlush() au Système.Web.HttpResponse.Flush (Booléen finalFlush) à Système.Web.HttpResponse.Flush () at Système.Web.HttpResponse.La fin de() à Système.Web.INTERFACE.HttpResponseWrapper.Système.Web.INTERFACE.IHttpResponse.Fin() à Système.Web.INTERFACE.PageRequestManager.OnPageError(Objet sender, EventArgs e) à Système.Web.INTERFACE.TemplateControl.OnError(EventArgs e) à Système.Web.INTERFACE.Page.HandleError(À L'Exception De e) à Système.Web.INTERFACE.Page.ProcessRequestMain (Booléen includeStagesBeforeAsyncPoint, booléen includeStagesAfterAsyncPoint) à Système.Web.INTERFACE.Page.ProcessRequest (Boolean includeStagesBeforeAsyncPoint, booléen includeStagesAfterAsyncPoint) à Système.Web.INTERFACE.Page.ProcessRequest () à Système.Web.INTERFACE.Page.ProcessRequestWithNoAssert (HttpContext contexte) à Système.Web.INTERFACE.Page.ProcessRequest(HttpContext) contexte) à ASP.default_aspx.ProcessRequest(HttpContext) contexte) à Système.Web.HttpApplication.Callhandlerexécutionstep.Système.Web.HttpApplication.IExecutionStep.Exécuter() à Système.Web.HttpApplication.ExecuteStep(IExecutionStep) step, Boolean& completedSynchronously)

70
demandé sur abatishchev 2011-04-06 14:26:24

6 réponses

j'ai celui-ci tout le temps. Cela signifie que l'utilisateur a commencé à télécharger un fichier, puis elle soit échec , ou qu'ils annulé .

pour reproduire l'exception essayez de le faire vous - même-cependant je ne sais pas comment l'empêcher (sauf pour la manipulation de cette exception spécifique seulement).

vous devez décider quelle est la meilleure façon d'avancer dépend de votre application.

52
répondu m.edmondson 2011-04-06 10:29:43

As M. edmondson a mentionné , " l'hôte distant a fermé la connexion."se produit quand un utilisateur ou un navigateur annule quelque chose , ou la connexion réseau tombe etc. Il ne doit pas nécessairement être un fichier de téléchargement cependant, juste une demande pour une ressource qui entraîne une réponse au client. Fondamentalement, l'erreur signifie que la réponse n'a pas pu être envoyé car le serveur ne peut plus parler au client(navigateur).

il y a un certain nombre de mesures que vous pouvez prendre pour empêcher que cela se produise. Si vous envoyez manuellement quelque chose dans la réponse avec une réponse.Écrire, Réponse.Flush, en retournant des données à partir d'un web servivce/page méthode ou quelque chose de similaire, alors vous devriez envisager de vérifier la réponse.IsClientConnected avant d'envoyer la réponse. Aussi, si la réponse est susceptibles de prendre beaucoup de temps ou beaucoup de traitement côté serveur, vous devez vérifier périodiquement jusqu'à ce que la réponse.fin si on l'appelle. Pour plus de détails sur cette propriété, voir les rubriques suivantes:

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx

alternativement, ce qui je crois est très probable dans votre cas, l'erreur est causée par quelque chose à l'intérieur du cadre. Le lien suivant peut être utilisé:

http://blog.whitesites.com/fixing-The-remote-host-closed-the-connection-The-error-code-is-0x80070057__633882307305519259_blog.htm

le poteau de débordement de cheminée suivant pourrait également présenter un intérêt:

"L'hôte distant a fermé la connexion" en Réponse.OutputStream.Écrire

24
répondu Sam Shiles 2018-01-17 06:07:26

on peut reproduire l'erreur avec le code ci-dessous:

public ActionResult ClosingTheConnectionAction(){
   try
   {
      //we need to set buffer to false to
      //make sure data is written in chunks
      Response.Buffer = false;  
      var someText = "Some text here to make things happen ;-)";
      var content = GetBytes( someText );

      for(var i=0; i < 100; i++)
      {
         Response.OutputStream.Write(content, 0, content.Length);
      }

      return View();
   }
   catch(HttpException hex)
   {
      if (hex.Message.StartsWith("The remote host closed the connection. The error code is 0x800704CD."))
            {
                //react on remote host closed the connection exception.
                var msg = hex.Message;
            }  
   }
   catch(Exception somethingElseHappened)
   {
      //handle it with some other code
   }

   return View();
} 

exécute maintenant le site en mode de débogage. Mettez un point de rupture dans la boucle qui écrit sur le flux de sortie. Allez à cette méthode d'action et après la première itération passée fermez l'onglet du navigateur. Appuyez sur F10 pour continuer la boucle. Après avoir frappé à la prochaine itération, vous verrez l'exception. Profitez de votre exception :-)

9
répondu Yaroslav Yakovlev 2015-03-26 15:14:00

j'ai eu cette erreur quand j'ai lu dynamiquement les données d'un WebRequest et jamais fermé le Response .

    protected System.IO.Stream GetStream(string url)
    {
        try
        {
            System.IO.Stream stream = null;
            var request = System.Net.WebRequest.Create(url);
            var response = request.GetResponse();

            if (response != null) {
                stream = response.GetResponseStream();

                // I never closed the response thus resulting in the error
                response.Close(); 
            }
            response = null;
            request = null;

            return stream;
        }
        catch (Exception) { }
        return null;
    }
2
répondu cbillowes 2013-02-26 15:19:46

asp.net 2.0 site IIS7 Windows2008. Le même code sur iis6 a bien fonctionné. Ça me causait un problème parce que ça perturbait le processus de connexion. L'utilisateur se connecte et obtient un 302 par défaut.asxp, qui passerait par page_load, mais pas aussi loin que Pre-render avant iis7 enverrait un 302 de retour à login.aspx sans le cookie auth. J'ai commencé à jouer avec les paramètres de l'Application pool, et pour une raison quelconque, "enable 32 bit applications" semble l'avoir corrigé. Aucune idée de pourquoi, depuis ce site ne fait rien de spécial qui devrait nécessiter des pilotes 32 bits. Nous avons certains sites qui utilisent encore L'accès qui exigent 32bit, mais pas nos sites SQL comme celui-ci.

1
répondu Rich Wilson 2011-09-20 18:46:48

moi aussi j'ai eu cette même erreur sur mon gestionnaire d'image que j'ai écrit. Je l'ai obtenu comme 30 fois par jour sur le site avec le trafic lourd, a réussi à le reproduire aussi. Vous obtenez ceci quand un utilisateur annule la demande( ferme la page ou sa connexion internet est interrompue par exemple), dans mon cas dans la rangée suivante:

myContext.Response.OutputStream.Write(buffer, 0, bytesRead);

Je ne vois aucun moyen de l'empêcher, mais peut-être que vous pouvez gérer ça correctement. Ex:

        try
        {
            …
            myContext.Response.OutputStream.Write(buffer, 0, bytesRead);
            …
        }catch (HttpException ex)
        {
            if (ex.Message.StartsWith("The remote host closed the connection."))
                ;//do nothing
            else
                //handle other errors
        }            
        catch (Exception e)
        {
            //handle other errors
        }
        finally
        {//close streams etc..
        }
1
répondu Robert Benyi 2013-11-04 07:59:48