ما الذي يسبب "انتهاك بروتوكول قناة TCP المتوقع" في .NET Remoting؟

StackOverflow https://stackoverflow.com/questions/3603431

  •  25-09-2019
  •  | 
  •  

سؤال

لديّ تطبيق موزع يستخدم .NET Remoting على شبكة Gigabit داخل المنزل. يوجد خادم واحد ، وأكثر من عشرة من العملاء الذين يتصلون بالخادم. يقوم العملاء بتشغيل سلسلة رسائل متعددة ، ويمكن أن يكون هناك ما يصل إلى 10 طلبات متزامنة من كل عميل.

هذا التطبيق يعمل بشكل جيد للغاية معظم الوقت. يبقى الخادم لأشهر في وقت واحد. من وقت لآخر أحصل على استثناء على عميل ، ولا يمكنني معرفة سبب الاستثناء. استثناء وتكدس تتبع:

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 إلى TCP وعدم تغيير كل شيء ، حتى يحصلوا على الاستثناء عندما يحاولون الاتصال. في حالتي ، سوف يعمل العميل أيام قبل أن أحصل على هذا الخطأ.

نقطة بيانات أخرى: يحصل الخادم على الكثير من الطلبات. معظم العملاء هم من زحف الويب الذين يقدم كل منهم أكثر من 2000 طلب إلى الخادم كل دقيقة. لذلك يقوم الخادم بمعالجة ما يزيد عن 500 طلب في الثانية ، مع رشقات حرارية أعلى. في أي حال ، يبدو أن الخادم يتعامل مع حركة المرور بشكل جيد ، وأتوقع وجود خطأ مختلف كثيرًا إذا أصبح الخادم محملاً.

أي أفكار ما الذي يسبب هذا الخطأ؟

هل كانت مفيدة؟

المحلول

يحدث هذا الخطأ عادة عندما يتم تلقي رسالة برؤوس خاطئة. يمكنك تكرار هذا الخطأ مع إنشاء اتصال Telnet بخادمك واكتب شيء ما. في معظم الحالات يكون خطأ في الشبكة.

أوصي بشدة بالتحقق من جدار الحماية الخاص بك. بعض جدران الحماية تسقط حزم الشبكة بسبب تنبيه الهجوم الخاطئ.

موازنة التحميل هي سبب آخر ممكن. تحميل موازن يقسم الحزم إلى خوادم مختلفة.

نصائح أخرى

لقد رأيت هذه المشكلة عندما يستخدم MS DNS Server الكثير من المنفذ المفتوح ، لذلك لا يمكن إنشاء المنفذ الخارجي. نعم ، إنه أمر مضحك للغاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top