خدمات Soap Services من IIS 5.1 (XP) توقيت
-
20-09-2019 - |
سؤال
لدينا تطبيق 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).