2010-08-30 8 views
8

मेरे पास एक वितरित एप्लिकेशन है जो इन-हाउस गिगाबिट नेटवर्क पर .NET Remoting का उपयोग करता है। एक सर्वर है, और एक दर्जन से अधिक क्लाइंट जो सर्वर से कनेक्ट होते हैं। ग्राहक एकाधिक धागे चलाते हैं, और प्रत्येक ग्राहक से 10 समवर्ती अनुरोध हो सकते हैं।.NET Remoting में "टीसीपी चैनल प्रोटोकॉल उल्लंघन प्रक्षेपण की अपेक्षा" का क्या कारण बनता है?

यह एप्लिकेशन ज्यादातर समय बहुत अच्छी तरह से काम करता है। सर्वर एक समय में महीनों तक रहता है। समय-समय पर मुझे क्लाइंट पर अपवाद मिलता है, और मैं यह नहीं समझ सकता कि अपवाद का कारण क्या है। अपवाद और स्टैक ट्रेस हैं:

System.Runtime.Remoting.RemotingException: Tcp channel protocol violation: expecting preamble. 

Server stack trace: 
    at System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadAndMatchPreamble() 
    at System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(UInt16& operation) 
    at System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders() 
    at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream) 
    at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg) 

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 

यह स्टैक ट्रेस है जहां मैं रिमोटिंग कॉल करता हूं।

मैंने देखा है कि मैं जो कॉल कर रहा हूं, या सर्वर पर लौटने वाले डेटा में सामान्य से कुछ भी नहीं ढूंढ सकता है।

Google इस त्रुटि की खोज बहुत उपयोगी नहीं है। मैंने देखा है कि अधिकांश त्रुटियों को HTTP से टीसीपी में कनवर्ट करने और सबकुछ बदलने के आसपास घूमता नहीं है, इसलिए जब वे कनेक्ट करने का प्रयास करते हैं तो उन्हें अपवाद मिलता है। मेरे मामले में, ग्राहक इस त्रुटि को प्राप्त करने से पहले दिन के लिए चलाएगा।

एक अन्य डेटा बिंदु: सर्वर को बहुत से अनुरोध मिलते हैं। अधिकांश ग्राहक वेब क्रॉलर हैं जो हर मिनट सर्वर से 2,000 से अधिक अनुरोध करते हैं। तो सर्वर उच्च यातायात के विस्फोट के साथ प्रति सेकंड 500 अनुरोधों के ऊपर प्रसंस्करण कर रहा है। किसी भी मामले में, सर्वर यातायात को ठीक से प्रतीत होता है, और सर्वर ओवरलोड होने पर मुझे एक बहुत अलग त्रुटि की उम्मीद होगी।

कोई भी विचार जो इस त्रुटि का कारण बन रहा है?

+0

स्वीकार्य नुकसान? ; पी – leppie

उत्तर

2

यह त्रुटि आमतौर पर तब होती है जब गलत शीर्षलेख वाले संदेश प्राप्त होते हैं। आप अपने सर्वर में एक टेलनेट कनेक्शन बनाने और कुछ टाइप करने के साथ इस त्रुटि को दोहरा सकते हैं। ज्यादातर मामलों में यह एक नेटवर्क त्रुटि है।

मैं अत्यधिक आपके फ़ायरवॉल की जांच करने की सलाह देता हूं। कुछ फ़ायरवॉल गलत हमले चेतावनी के कारण नेटवर्क पैकेट छोड़ देता है।

लोड संतुलन एक और संभावित कारण है। लोड बैलेंसर विभिन्न सर्वरों पर पैकेट विभाजित करता है।

+0

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

+0

यदि कोई संपत्ति marshallbyref ऑब्जेक्ट पर मौजूद है, तो आप उन्हें विधियों में बदलने की कोशिश कर सकते हैं। प्रत्येक बार जब आप संपत्ति तक पहुंचते हैं तो यह एक संदेश कॉल का कारण बनता है। उन्हें विधियों में कनवर्ट करने से क्लाइंट और सर्वर के बीच संदेश कम हो जाते हैं। इसके अलावा आप क्लाइंट कैशिंग के लिए कुछ कक्षाओं को क्रमबद्ध कर सकते हैं। – ertan

+0

रिमोट ऑब्जेक्ट पर कोई भी सुलभ गुण नहीं हैं। ऐसा लगता है कि यह स्विच है। मैं इस स्विच के माध्यम से पैकेट की अविश्वसनीय संख्या को दबा रहा हूं, और यह स्विच की तरह दिख रहा है बस इसे संभाल नहीं सकता है। किसी भी मामले में, मुझे आश्वस्त है कि त्रुटि सॉफ़्टवेयर विफलता नहीं है, बल्कि हार्डवेयर समस्या है। जवाब के लिए धन्यवाद। –

0

मुझे यह समस्या दिखाई दे रही है जब एमएस DNS सर्वर ने बहुत सारे खुले बंदरगाह का उपयोग किया था, इसलिए आउटबाउंड पोर्ट नहीं बनाया जा सकता है। हाँ, यह बहुत मजेदार है।

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