2011-04-15 12 views
8

"दूरस्थ होस्ट कनेक्शन बंद कर दिया" मैं लगातार निम्न अपवाद है जो एक डाउनलोड की शुरुआत एक उपयोगकर्ता के कारण होता है हो रही है और यह फलस्वरूप नाकाम रहने के (या रद्द किया जा रहा) कर रहा हूँ:स्वीकृत को रोकने के लिए जिस तरह से अपवाद

Error Message : The remote host closed the connection. The error code is 0x80072746. Stack Trace : at System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.FlushCore(Byte[] status, Byte[] header, Int32 keepConnected, Int32 totalBodySize, Int32 numBodyFragments, IntPtr[] bodyFragments, Int32[] bodyFragmentLengths, Int32 doneWithSession, Int32 finalStatus, Boolean& async) at System.Web.Hosting.ISAPIWorkerRequest.FlushCachedResponse(Boolean isFinal) at System.Web.Hosting.ISAPIWorkerRequest.FlushResponse(Boolean finalFlush) at

मैंने पूरे इंटरनेट, and found an interesting article पर खोज की है, हालांकि लॉग को भरने से रोकने के लिए सबसे अच्छा तरीका यह नहीं है कि एक निश्चित उत्तर नहीं है।

उपयोगकर्ता को कोई त्रुटि नहीं दिखती है और ऐप में कोई वास्तविक समस्या नहीं है क्योंकि यह केवल नियंत्रण (मेरी समझ में) इसके नियंत्रण से बाहर होती है (उपयोगकर्ता डाउनलोड को डाउनलोड या कनेक्शन खो देता है) लेकिन रोकने के लिए एक तरीका होना चाहिए इस तरह के एक अपवाद की सूचना दी जा रही है।

मुझे यह कहने से नफरत है, लेकिन मैं इस अपवाद की जांच करने के लिए प्रेरित हूं और खाली पकड़ अपने गधे को अवरुद्ध करता हूं - लेकिन इससे मुझे गंदे प्रोग्रामर की तरह महसूस होता है।

तो - इस अपवाद को मेरे मेलबॉक्स को भरने की स्वीकृत विधि क्या है?

+0

आपको यह समझाना होगा कि उपयोगकर्ता कैसे डाउनलोड शुरू करता है? क्या यह ब्राउज़र है? AJAX में है? ... – Aliostad

+0

@ m.edmondson - यदि कोई अपवाद होता है तो आपको या तो इसे पकड़ने या अपनी सेटिंग्स को समायोजित करने की आवश्यकता होती है ताकि आप यह अपवाद होने पर हर बार ईमेल न करें। एक डाउनलोड खत्म नहीं होना चाहिए इसका कारण नहीं होना चाहिए। –

+0

यह 'System.Web.HttpResponse.TransmitFile() ' –

उत्तर

2

आप रिमोट होस्ट को कुछ भी बंद करने से नहीं रोक सकते हैं।

और कुछ प्रोटोकॉल में अलविदा कहने के लिए यह सामान्य (या कम से कम स्वीकार्य) तरीका है।

तो आपको यह विशिष्ट अपवाद को संभालना होगा।

+0

मैं समझता हूं कि - मुझे –

+2

करने का सबसे अच्छा/स्वीकार्य/सबसे उपयुक्त तरीका चाहिए इस दुर्लभ मामले में एक खाली पकड़-ब्लॉक स्वीकार्य है । इसे एक बड़ी टिप्पणी के साथ भरें क्यों यह खाली है। –

+2

मैं अंतिम पंक्ति के ** ** ** पर जोर देना चाहता हूं। केवल पकड़ें() या पकड़ें (अपवाद ई), अपने विशिष्ट अपवाद को पकड़ें और दूसरों को तब तक उपयोगकर्ता को बुलबुला न करें जब तक आप उनके बारे में कुछ नहीं कर सकते। – BenCr

1

एक व्यावहारिक परिप्रेक्ष्य से, मृत कंप्यूटर या मारे गए वेब सत्र के आधार पर डाउनलोड रद्द करने में कुछ भी गलत नहीं है, इसलिए दूरस्थ होस्ट बंद अपवादों को पकड़ना पूरी तरह से स्वीकार्य है।

+1

तो यह सुनिश्चित करने का सबसे अच्छा तरीका क्या होगा कि मैं इसे _only_ जाल करूँ? अपवाद संदेश जांचें? –

+0

संदेश आपको क्या देता है कि वास्तविक अपवाद नहीं है? अपवाद का पता लगाएं (यह मेरे कई कारणों से हो सकता है, लेकिन अंतर्निहित प्रभाव नहीं बदलता है) – Petesh

6

त्रुटि तब होती है जब आप क्लाइंट को प्रतिक्रिया भेजने का प्रयास करते हैं लेकिन वे डिस्कनेक्ट हो जाते हैं। आप Response.Redirect पर ब्रेकपॉइंट सेट करके इसे सत्यापित कर सकते हैं या जहां भी आप क्लाइंट को डेटा भेज रहे हैं, विजुअल स्टूडियो को ब्रेकपॉइंट पर हिट करने के लिए प्रतीक्षा करें, फिर आईई में अनुरोध रद्द करें (लोकेशन बार में एक्स का उपयोग करके)। इससे त्रुटि उत्पन्न होनी चाहिए।

त्रुटि आप निम्नलिखित का उपयोग कर सकते कब्जा करने के लिए:

try 
{ 
    Response.Redirect("~/SomePage.aspx"); 
    Response.End(); 
} 
catch (System.Threading.ThreadAbortException) 
{ 
    // Do nothing. This will happen normally after the redirect. 
} 
catch (System.Web.HttpException ex) 
{ 
    if (ex.ErrorCode == unchecked((int)0x80070057)) //Error Code = -2147024809 
    { 
     // Do nothing. This will happen if browser closes connection. 
    } 
    else 
    { 
     throw ex; 
    } 
} 

या सी # 6 में आप अपवाद फिल्टर का उपयोग कर सकते त्रुटि फेंक फिर से होने से रोकने के लिए:

try 
{ 
    Response.Redirect("~/SomePage.aspx"); 
    Response.End(); 
} 
catch (System.Threading.ThreadAbortException) 
{ 
    // Do nothing. This will happen normally after the redirect. 
} 
catch (System.Web.HttpException ex) when (ex.ErrorCode == unchecked((int)0x80070057)) 
{ 
    // Do nothing. This will happen if browser closes connection. 
} 

जो एक बेहतर है डीबगिंग अनुभव क्योंकि यह वर्तमान स्थिति के साथ अपवाद फेंकने वाले बयान पर रोक देगा और कैच ब्लॉक के अंदर फेंकने के बजाय संरक्षित सभी स्थानीय चर।

संबंधित मुद्दे