रिमोट होस्ट ने कनेक्शन बंद कर दिया। त्रुटि कोड 0x800704CD है


81

जब भी कोई अपवाद होता है, मुझे अपनी वेबसाइट से त्रुटि ईमेल प्राप्त होते हैं। मुझे यह त्रुटि मिल रही है:

रिमोट होस्ट ने कनेक्शन बंद कर दिया। त्रुटि कोड 0x800704CD है

और पता नहीं क्यों। मुझे दिन में लगभग 30 मिलते हैं। मैं त्रुटि को पुन: उत्पन्न नहीं कर सकता या तो समस्या को ट्रैक नहीं कर सकता।

वेबसाइट ASP.NET 2 IIS7 पर चल रही है।

स्टैक ट्रेस:

System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError (Int32 परिणाम, बूलियन थ्रोऑनडिस्कनेक्ट) System.Web.Hosting.IIS7WorkerRequest। ) System.Web.HttpResponse.End () पर System.Web.UI.HttpResponseWrapper.System.Web। .Web.UI.emplateControl.OnError (EventArgs e) System.Web.UI.Page.HandleError (Exception e) पर System.Web.UI.Page.ProcessRequestain (बूलियन शामिल हैं ।SteBeAsyncPoint, बूलियन में शामिल हैं। Page.ProcessRequest (बूलियन में शामिल हैं। System पर रीज़न करें। सिस्टम में।Web.UI.Page.ProcessRequestWithNoAssert (HttpContext संदर्भ) System.Web.UI.Page.ProcessRequest (HttpContext संदर्भ) ASP पर। IExecutionStep.Execute () सिस्टम पर

जवाबों:


60

मुझे हर समय यही मिलता है। इसका मतलब है कि उपयोगकर्ता ने एक फ़ाइल डाउनलोड करना शुरू कर दिया, और फिर यह या तो विफल हो गया , या उन्होंने इसे रद्द कर दिया

अपवाद को पुन: उत्पन्न करने के लिए स्वयं ऐसा करने का प्रयास करें - हालाँकि मैं इसे रोकने के लिए किसी भी तरीके से अनजान हूँ (केवल इस विशिष्ट अपवाद को संभालने के लिए छोड़कर)।

आपको यह तय करने की आवश्यकता है कि आपके ऐप के आधार पर आगे का सबसे अच्छा तरीका क्या है।


मैं अपनी साइट पर कोई फ़ाइल डाउनलोड की पेशकश नहीं करता हूं। क्या पेज की सामग्री डाउनलोड करने से इसका कारण होगा?
वेबनोब

7
हाँ यह होगा, स्टैक ट्रेस को देखने का System.Web.HttpResponse.Flush()मतलब है किसी भी तरह की प्रतिक्रिया। मैंने अभी यह पाया है , यह आपको उस समस्या के मार्ग पर ले जाने में मदद कर सकता है जहाँ व्यूस्टेट बहुत बड़ा है और उपयोगकर्ता बहुत जल्दी क्लिक कर रहे हैं जो इस अपवाद का कारण बन सकता है।
m.edmondson

क्या आप जानते हैं कि यह उपयोगकर्ता के लिए एक त्रुटि या सिर्फ एक छिपा हुआ है?
वेबनोब

2
इस शो में मेरी खुद की जांच बताती है कि यूजर्स सामान्य से हटकर कुछ नहीं देखते हैं। क्या आपको ग्राहकों / ग्राहकों से कोई शिकायत है?
m.edmondson

2
नहीं कोई नहीं। सहायता के लिए धन्यवाद।
वेबनोब

30

जैसा कि m.edmondson ने उल्लेख किया है , "दूरस्थ होस्ट ने कनेक्शन बंद कर दिया है।" तब होता है जब कोई उपयोगकर्ता या ब्राउज़र किसी चीज़ को रद्द कर देता है , या नेटवर्क कनेक्शन इत्यादि को छोड़ देता है, लेकिन जरूरी नहीं कि फ़ाइल को डाउनलोड किया जाए, बस किसी भी संसाधन के लिए कोई अनुरोध जो क्लाइंट के जवाब में हो। मूल रूप से त्रुटि का मतलब है कि प्रतिक्रिया नहीं भेजी जा सकती क्योंकि सर्वर अब क्लाइंट (ब्राउज़र) से बात नहीं कर सकता है।

इसे रोकने के लिए आप कई कदम उठा सकते हैं। यदि आप मैन्युअल रूप से Response.Write, Response.Flush के साथ प्रतिक्रिया में कुछ भेज रहे हैं, तो वेब सर्विव / पेज विधि या कुछ इसी तरह से डेटा लौटा रहे हैं, तो आपको प्रतिक्रिया भेजने से पहले Response.IsClientConnected की जाँच करने पर विचार करना चाहिए। इसके अलावा, यदि प्रतिक्रिया में लंबे समय तक चलने की संभावना है या बहुत अधिक सर्वर-साइड प्रसंस्करण की आवश्यकता है, तो आपको समय-समय पर इस प्रतिक्रिया की जांच करनी चाहिए। यदि कहा जाता है। इस संपत्ति के विवरण के लिए निम्नलिखित देखें:

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

वैकल्पिक रूप से, जो मेरा मानना ​​है कि आपके मामले में सबसे अधिक संभावना है, त्रुटि फ्रेमवर्क के अंदर कुछ के कारण हो रही है। निम्नलिखित लिंक उपयोग द्वारा हो सकता है:

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

निम्नलिखित स्टैक-ओवरफ्लो पोस्ट ब्याज की भी हो सकती है:

"रिमोट होस्ट ने कनेक्शन बंद कर दिया" Response.OutputStream.Write में


2
के लिए बड़ा अप Response.IsClientConnected!
Stumblor

10

नीचे दिए गए कोड के साथ त्रुटि को पुन: उत्पन्न कर सकता है:

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();
} 

अब वेबसाइट को डिबग मोड में चलाएं। लूप में एक ब्रेकपॉइंट डालें जो आउटपुट स्ट्रीम को लिखता है। उस क्रिया विधि पर जाएं और पहले पुनरावृत्ति के बाद ब्राउज़र का टैब बंद करें। पाश को जारी रखने के लिए F10 मारो। इसके बाद अगली पुनरावृत्ति पर आपको अपवाद दिखाई देगा। अपने अपवाद का आनंद लें :-)


2

मैं इसे asp.net 2.0 iis7 Windows2008 साइट पर प्राप्त कर रहा था। Iis6 पर समान कोड ने ठीक काम किया। यह मेरे लिए एक समस्या पैदा कर रहा था क्योंकि यह लॉगिन प्रक्रिया को गड़बड़ कर रहा था। उपयोगकर्ता लॉगिन करेगा और default.asxp को 302 मिलेगा, जो पेज_लोड के माध्यम से मिलेगा, लेकिन जहाँ तक iis7 से पहले प्री-रेंडर नहीं होगा, तब तक 302 वापस लॉगिन करना होगा। मैंने ऐप पूल सेटिंग्स के साथ खेलना शुरू कर दिया है, और किसी कारण से '32 बिट एप्लिकेशन को सक्षम करें' लगता है कि यह तय हो गया है। पता नहीं क्यों, क्योंकि यह साइट कुछ विशेष नहीं कर रही है जिसे किसी भी 32 बिट ड्राइवरों की आवश्यकता होनी चाहिए। हमारे पास कुछ साइटें हैं जो अभी भी एक्सेस का उपयोग करती हैं जिनके लिए 32 बिट की आवश्यकता होती है, लेकिन हमारी स्ट्रेट SQL साइट्स जैसे यह नहीं।


32 बिट अनुप्रयोगों को सक्षम करने से यह मेरे लिए भी तय हो गया। धन्यवाद !
प्रणीत नाडकर

32 बिट एप्लिकेशन को सक्षम करने के परिणामस्वरूप कम मेमोरी का उपयोग करके आवेदन किया जा सकता है, जो संकेत दे सकता है कि सर्वर पर मेमोरी समस्या है। यह पूरी तरह से एक अलग समस्या भी हो सकती है।
जाहू

2

मुझे यह त्रुटि तब मिली जब मैंने गतिशील रूप से डेटा को पढ़ा WebRequestऔर कभी बंद नहीं किया 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;
    }

1

मुझे अपनी छवि हैंडलर पर भी यही त्रुटि मिली जो मैंने लिखी थी। मैंने इसे भारी ट्रैफ़िक वाली साइट पर दिन में 30 बार प्राप्त किया, इसे पुन: पेश करने में भी कामयाब रहा। आपको यह तब मिलता है जब कोई उपयोगकर्ता अनुरोध को रद्द करता है (उदाहरण के लिए पृष्ठ या उसका इंटरनेट कनेक्शन बंद हो जाता है), मेरे मामले में निम्न पंक्ति में:

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

मैं इसे रोकने का कोई तरीका नहीं सोच सकता, लेकिन शायद आप इसे ठीक से संभाल सकें। 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..
        }

4
यह बुरी तरह से विफल होता है जब सर्वर संस्कृति अंग्रेजी नहीं होती है (क्योंकि संदेश किसी अन्य भाषा में होगा)। केवल ErrorCodeअपवाद की संपत्ति का उपयोग करें (जो 2147943629, HRESULT 0x800704CD के बराबर होना चाहिए)।
रोनाल्ड

4
सुधार: ErrorCodeHRESULT के लिए 0x800704CD है -2147023667
रोनाल्ड

मैंने कभी भी गैर अंग्रेजी सर्वर संस्कृति का उपयोग नहीं किया है, लेकिन मैं आपकी समस्या देखता हूं। कभी भी कम न करें, आप अलग-अलग सर्वर संस्कृतियों को संभालने के लिए कोड की एक पंक्ति को बदल सकते हैं, जैसे कि आपने जो सुझाव दिया था
रॉबर्ट बेनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.