Назад | Перейти на главную страницу

Timer_EntityBody, Timer_ConnectionIdle и соединение неожиданно закрылись

У нас есть приложение для Windows, оно подключается к веб-службе (веб-служба XML, размещенная на Windows 2008 Server IIS 7.5, без антивируса) и передает некоторые данные клиенту. Но иногда (около 5-10% запросов) выдает ошибку при попытке подключения веб-службы.

Вот журнал ошибок клиентского приложения;

Exception:System.Net.WebException: The underlying connection was closed: The connection was closed unexpectedly.
at System.Web.Services.Protocols.WebClientAsyncResult.WaitForResponse()
at System.Web.Services.Protocols.WebClientProtocol.EndSend(IAsyncResult asyncResult, Object& internalAsyncState, Stream& responseStream)
at System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
at APPClient.APPFPService.WEBService.EndAddMoney(IAsyncResult asyncResult)
at APPClient.BLL.ServiceAgent.AddMoneyCallback(IAsyncResult ar)

С другой стороны, на веб-сервере я проверил журналы ошибок HTTP и увидел такой длинный файл;

2014-06-05 14:02:04 65.82.178.73 53798 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:07:24 76.109.81.223 58985 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:07:39 76.109.81.223 2803 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:08:59 76.109.81.223 52656 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -
2014-06-05 14:09:05 65.82.178.73 53904 SERVER.IP.ADDRESS 80 HTTP/1.1 POST /webservice/webservice.asmx - 2 Timer_EntityBody SYPService
2014-06-05 14:10:55 50.186.180.191 50648 SERVER.IP.ADDRESS 80 - - - - - Timer_ConnectionIdle -

Вот похожая ситуация, но мне это не помогло.

ОБНОВИТЬ: Когда я проверил журналы IIS, я обнаружил такие проблемы;

cs-method   cs-uri-stem                     sc-status   sc-win32-status     time-taken  cs-version
POST        /webservice/webservice.asmx     400         64                  46          HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  134675      HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  37549       HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  109         HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  31          HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  0           HTTP/1.1
POST        /webservice/webservice.asmx     400         64                  15          HTTP/1.1

sc-win32-status 64 : Указанное сетевое имя больше не доступно.

sc-status 400 : Неверный запрос

Также некоторые запросы занимают около 130 секунд, но некоторые - менее 1 секунды. Это приложение для Windows, которое подключается к веб-службе для обработки некоторых данных. Нет запроса, который занимает около 130 секунд в базе данных.

из журнала IIS. он показывает, что веб-сервис недоступен или недоступен "/webservice/webservice.asmx 400". Запустите веб-службу отдельно, чтобы убедиться, что веб-служба запущена и работает на том же сервере, где размещена служба Windows. Также это может быть проблема сети, если служба Windows и веб-служба находятся в разных местах.

Вы смотрите журналы HTTPERR, но это может быть не вся история.

Здесь есть ссылка на то, что означает каждый код: 820729 Короче говоря, единственная проблема, о которой говорилось выше, - это POST, который был запрещен из-за слишком длительного выполнения (Timer_EntityBody - т.е. тело объекта не было получено до истечения времени ожидания, настроенного для HTTPAPI из вашего приложения).

Неясно, размещаете ли вы это приложение в IIS, но я бы посоветовал, если вы получаете эти ошибки, исследовать их на уровне приложения (\ inetpub \ logs \ w3svcxxx), а не на уровне системы (\ windows \ system32 \ logfiles \ httperr).

Журналы приложений могут содержать любые ошибки, проблемы или рывки на уровне приложения, а также могут быть свидетельства в журнале событий приложений в EventVwr.