سؤال

لدينا تطبيق ASP.NET Web يعمل في IIS يستخدم فئة SOPHTTPClientProtocol لجعل مكالمات الصابون. في الأيام القليلة الماضية، بدأت العديد من أجهزة XP في الإبلاغ عن أخطاء المهلة عند إجراء مكالمات خدمات الصابون.

تتبع المكدس من تطبيق اختبار:

System.Net.WebException: The operation has timed out
   at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at TestWS.localhost.Service1.HelloWorld() in C:\Prototypes\TestWS\Web References\localhost\Reference.cs:line 78
   at ASP.default_aspx.__Renderform1(HtmlTextWriter __w, Control parameterContainer) in c:\Inetpub\wwwroot\TestWS\Default.aspx:line 17

باستخدام TCP / Trace و Wireshark يمكننا أن نرى أن رأس الطلب يتم إرساله ولكن ليس المحتوى. ومع ذلك، فإن المعلمة HTTP طول المحتوى صحيحة، كما أنه إذا لم يتم مسح دفق المحتوى.

نشك في أن Microsoft تحديث قد تسبب في هذه المشكلة. يحتمل KB970430., KB971737. و KB968389.. وبعد يبدو أن المشكلة معزولة في IIS 5.x (إصدار XP من IIS).

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

المحلول

تحديث: تحولت هذه مشكلة مع ESET Antivirus يعمل على خادم الويب وأداء التحقق من اتصالات HTTP من خادم الويب إلى خادم الصابون.

وصف كامل: بالنسبة للسجل، هذا هو عيب في معالجة بروتوكول HTTP في .NET. السيناريو كما يلي:

يرسل العميل رأس وظيفة HTTP:

POST /WS/Test.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3603) 
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://testuri.org/HelloWorld"
Host: loadtest-app
Content-Length: 288
Expect: 100-continue
Connection: Keep-Alive

لا يتم إرسال المحتوى بسبب توقع: 100 متابعة. يستجيب الخادم الآن:

HTTP/1.1 100 Continue

في هذه المرحلة، لا يستجيب العميل. الحل البديل لهذا هو تعطيل 100 - متابعة التي تقوض أساسا رأس الطلب والمحتوى المراد إرسالها في قطعة واحدة. يمكن القيام بذلك في Web.config مع:

<system.net>
   <settings>
      <servicePointManager expect100Continue="false"/>
   </settings>
</system.net>

ومع ذلك، إذا قمنا أيضا بتحويل تسجيل تسجيل الجانب من جانب العميل، فسيتم إلقاء استثناء بروتوكول تفيد بأن CR يجب أن يتبعه LF في رؤوس HTTP. يبدو أن هناك بعض التعليمات البرمجية الهشة في منطق شبكة .NET في مكان ما. ولإصلاح هذه مشكلة فقط مع ASP.NET في IIS 5.1 (الإصدار الذي يعمل على XP).

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