2010-04-06 19 views
55

मैं एक व्यावसायिक अनुप्रयोग जो संदेश के साथ एक SocketException फेंक रहा है के साथ काम कर रहा हूँ द्वारा बंद कर दिया गया थाकोई मौजूदा कनेक्शन बलपूर्वक, दूरस्थ होस्ट

An existing connection was forcibly closed by the remote host

यह क्लाइंट और सर्वर के बीच एक गर्तिका कनेक्शन के साथ होता है। कनेक्शन जिंदा और अच्छी तरह से है, और डेटा के ढेर को स्थानांतरित किया जा रहा है, लेकिन फिर यह कहीं से भी डिस्कनेक्ट हो जाता है।

क्या किसी ने इसे पहले देखा है? कारण क्या हो सकता है? मैं कुछ कारणों का अनुमान लगा सकता हूं, लेकिन इस कोड में और अधिक जोड़ने का कोई तरीका है कि क्या कारण हो सकता है?

कोई टिप्पणी/विचार स्वागत है।

... नवीनतम ...

मैं कुछ नेट ट्रेसिंग से कुछ लॉगिंग है,

System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500Z 

System.Net.Sockets Error: 0 : [8188] Exception in the Socket#30180123::Send - An existing connection was forcibly closed by the remote host DateTime=2010-04-07T20:49:48.6317500Z 

System.Net.Sockets Verbose: 0 : [8188] Exiting Socket#30180123::Send() -> 0#0 

लॉगिंग मैं तथ्य यह है कि यह कहते हैं, 'देखा है के अन्य भागों के आधार पर 0 # 0 'का अर्थ है 0 बाइट लंबाई का एक पैकेट भेजा जा रहा है। लेकिन असल में उसका क्या अर्थ है?

दो संभावनाएं में से एक उत्पन्न कर रहा है, और मुझे यकीन है कि जो,

1) कनेक्शन बंद कर दिया जा रहा है नहीं हूँ, लेकिन डेटा तो सॉकेट से लिखा जा रहा है, इस प्रकार ऊपर अपवाद बनाने। 0 # 0 का मतलब है कि कुछ भी नहीं भेजा गया था क्योंकि सॉकेट पहले ही बंद कर दिया गया था।

2) कनेक्शन अभी भी खुला है, और शून्य बाइट्स का एक पैकेट भेजा जा रहा है (यानी कोड में एक बग है) और 0 # 0 का मतलब है कि शून्य बाइट्स का एक पैकेट भेजने की कोशिश कर रहा है।

आप क्या मानते हैं? मुझे लगता है कि यह असंभव हो सकता है, लेकिन शायद किसी और ने इस तरह की चीज़ देखी है?

+1

कोई भी यह अनुमान लगाने के इच्छुक नहीं है कि आपकी समस्या क्या है। अपना कोड पोस्ट करें! – ChaosPandion

+0

हाहा, ठीक है, क्षमा करें। लेकिन कोड मुझे समझने के लिए बहुत बड़ा और जटिल है और मैं थोड़ी देर के लिए इसके साथ काम कर रहा हूं। मुझे वायरशर्क के साथ जाना होगा, और अगर यह कुछ भी कम करता है तो मैं कुछ वायरशर्क पोस्ट कर सकता हूं, और/या उपयुक्त होने पर कुछ कोड पोस्ट कर सकता हूं। – peter

+0

@ पीटर - क्षमा मांगने की कोई आवश्यकता नहीं है। विस्मयादिबोधक बिंदु के साथ लिखना मुश्किल है और नाराज/शत्रुतापूर्ण नहीं लगता है। – ChaosPandion

उत्तर

53

इसका आम तौर पर मतलब है कि दूरस्थ पक्ष कनेक्शन बंद कर देता है (आमतौर पर एक टीसीपी/आईपी RST पैकेट भेजकर)। आप एक तीसरे पक्ष के आवेदन के साथ काम कर रहे हैं, संभावना कारण हैं:

  • आप आवेदन
  • क्लाइंट और सर्वर के बीच नेटवर्क लिंक किसी कारण
  • के लिए नीचे जा रहा है करने के लिए विकृत डेटा भेज रहे हैं
  • आप इसे दुर्घटना का कारण बना है कि तीसरे पक्ष के आवेदन में एक बग
  • तीसरे पक्ष के आवेदन सिस्टम संसाधन

यह पहला मामला है कि क्या होने है संभावना है कि समाप्त हो गया है ट्रिगर किया है आईएनजी।

समस्या को कम करने के लिए तार पर क्या हो रहा है यह देखने के लिए आप Wireshark को आग लग सकते हैं।

अधिक विशिष्ट जानकारी के बिना, यह संभावना नहीं है कि यहां कोई भी वास्तव में आपकी मदद कर सकता है।

+0

ग्रेट के साथ गड़बड़ है। धन्यवाद। Wireshark के बारे में दूसरी बात। यह इतना डेटा एकत्र करता है, मैं इस तरह कुछ फ़िल्टर करने में सक्षम कैसे होगा? अगर वायरशर्क कुछ दिखाता है तो मैं इसे बाद में यहां पोस्ट कर सकता हूं ... – peter

+2

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

+3

क्या बुलेट किए गए आइटमों का कोई स्रोत है, या नीचे गेमर का जवाब सिर्फ अपनी सूची कॉपी करें? – Zack

22

यह आपके कोड में कोई बग नहीं है। यह नेट के सॉकेट कार्यान्वयन से आ रहा है। यदि आप नीचे के रूप में EndReceive के अधिभारित कार्यान्वयन का उपयोग करते हैं तो आपको यह अपवाद नहीं मिलेगा।

SocketError errorCode; 
    int nBytesRec = socket.EndReceive(ar, out errorCode); 
    if (errorCode != SocketError.Success) 
    { 
     nBytesRec = 0; 
    } 
+3

यह कैसे करें? – MSaudi

+0

यह ऑपरेटिंग सिस्टम से और आखिरकार सहकर्मी से आ रहा है। इस आरोप के बारे में और स्पष्टीकरण की आवश्यकता है कि यह एक सॉफ्टवेयर बग है। – EJP

+2

+1। मेरे सी # कार्यक्रम में, मैं अपने सिर को टक्कर दे रहा था कि क्यों एक एंड्रॉइडिव क्लाइंट टर्मिनेशन होने पर 'एंडरसीव' अपवाद फेंक रहा है। यह नहीं पता था कि यह डिजाइन द्वारा है। मैं सामान्य कोड प्रवाह में अपवाद फेंकने के लिए अपने खराब डिजाइन महसूस करता हूं। अधिभारित विधि के लिए भगवान का शुक्र है। –

6

इस आम कष्टप्रद जारी करने के लिए सरल समाधान:

बस (अपने ".context.cs" फाइल करने के लिए जाने के तहत " .context.tt" जो नीचे स्थित स्थित अपने "* .edmx" फ़ाइल)।

फिर, अपने निर्माता को यह पंक्ति जोड़ें:

public DBEntities() 
     : base("name=DBEntities") 
    { 
     this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE ! 
    } 

आशा है कि यह उपयोगी है।

+0

धन्यवाद। त्रुटि – Esi

+0

@Esi कहां है इसे कहां रखा जाए? और कोई वापसी प्रकार ?? –

+1

@ फर्स्टस्टेप: कोज़ यह एक निर्माता है। –

0

मैं entity.In इकाई में वृत्तीय संदर्भ उस तरह

public class Catalog 
{ 
    public int Id { get; set; } 
    public int ParentId { get; set; } 
    public Catalog Parent { get; set; } 
    public ICollection<Catalog> ChildCatalogs { get; set; } 
} 

मैं जनक संपत्ति के लिए [IgnoreDataMemberAttribute] ने उन देखने की वजह से यह अपवाद मिल गया है। और यह समस्या हल हो गई।

0

मुझे यह अपवाद मिला जब मैं डेटाबेस से एक पंक्ति को पढ़ने की कोशिश कर रहा था जिसमें एनम कॉलम में शून्य था, यह शून्य को एक एनम वैल्यू में मैप नहीं कर सका।

+0

तो आपने इसके लिए कैसे सही किया? कोड? – vapcguy

+0

मैंने शून्य कॉलम में एक मान सेट किया है जिसने आवश्यक एनम मान पर नक्शा बनाया है। –

0

मैं इस अपवाद से मुलाकात की, जब कक्षा की डेटटाइम संपत्ति मूल्य प्राप्त नहीं कर रही है .मैं बस इसे निष्क्रिय समय बना देता हूं और समाधान मिला।

public class PlanningBoardBO 
    { 
     ... Other Properties ... 

     public DateTime? PickupDate { get; set; } 

     ... Here changed DateTime to DateTime? 
    } 
4

एक ही बग था। वास्तव में कुछ प्रॉक्सी (मेरे मामले में फिडलर) का उपयोग करके यातायात भेजा गया था। 4.5.2 से> = 4.6 तक .NET फ्रेमवर्क अपडेट किया गया और अब सबकुछ ठीक काम करता है। वास्तविक अनुरोध किया गया था:
new WebClient().DownloadData("URL");
अपवाद था:

SocketException: An existing connection was forcibly closed by the remote host

+2

यह मेरे लिए चीजों को हल करने का एक तरीका था। यह वास्तव में डिफ़ॉल्ट रूप से उपयोग किए जाने वाले टीएलएस .NET के किस संस्करण से संबंधित था। 4.5.2 और कम इस्तेमाल टीएलएस 1.0, जबकि 4.6 और अधिक 1.1 और 1.2 की अनुमति देने के बारे में अधिक स्मार्ट हैं। यह सर्वर पर 1.0 पर टीएलएस आवश्यकता को छोड़कर भी साबित हुआ, जिसने इस मुद्दे को भी ठीक किया। – HotN

0

यह त्रुटि सीआईपी प्रोटोकॉल जब भी मैं 10s से भी कम समय में डेटा भेजें या प्राप्त नहीं किया था के साथ अपने आवेदन में हुई।

यह आगे की खुली विधि के उपयोग के कारण हुआ था। आप किसी अन्य विधि के साथ काम करके, या 10 से कम की अद्यतन दर स्थापित करने से बच सकते हैं जो आपके आगे-खुले कनेक्शन को बनाए रखता है।

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