Время ожидания вызовов служб SOAP из IIS 5.1 (XP) - PullRequest
0 голосов
/ 17 декабря 2009

У нас есть веб-приложение ASP.NET, работающее в IIS, которое использует класс SoapHttpClientProtocol для выполнения вызовов SOAP. В последние несколько дней несколько компьютеров XP начали сообщать об ошибках тайм-аута при выполнении вызовов служб SOAP.

Трассировка стека из тестового приложения:

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-параметр content-length является правильным, это почти как если бы поток содержимого не был сброшен.

Мы подозреваем, что обновление Microsoft вызвало эту проблему. Потенциально KB970430 , KB971737 и KB968389 . Кажется, что проблема связана с IIS 5.x (версия IIS для XP).

1 Ответ

0 голосов
/ 18 декабря 2009

ОБНОВЛЕНИЕ : Это оказалось проблемой с антивирусом ESET, работающим на веб-сервере и выполняющим оперативную проверку HTTP-соединений с веб-сервера на сервер SOAP.

Полное описание : Для записи это дефект в обработке протокола HTTP в .NET. Сценарий таков:

Клиент отправляет заголовок HTTP POST:

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

Контент не отправлен из-за Expect: 100-Continue. Сервер теперь отвечает:

HTTP/1.1 100 Continue

На данный момент клиент не отвечает. Обходной путь для этого состоит в том, чтобы отключить 100-continue, который по существу заставляет заголовок запроса и контент отправляться в одном чанке. Это можно сделать в файле web.config с помощью:

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

Однако, если мы также включим ведение журнала трассировки на стороне клиента, то будет выдано исключение протокола, указывающее, что за CR следует заголовок LF в заголовках HTTP. Кажется, где-то есть хрупкий код в сетевой логике .Net. Напомним, что это проблема только ASP.NET в IIS 5.1 (версия, которая работает на XP).

...