Устранение неполадок ARR 502.3 / трассировка WinHttp на сервере 2012

У меня есть следующий сценарий:

3 виртуальных сервера Windows Server 2012, все с IIS 8:

  • 1 сервер с маршрутизацией запросов приложений 3
  • 2 сервера с веб-приложениями, на которые направляет сервер ARR

Я получаю периодически 502 3 12002 ошибки.

Следуя этому руководству http://www.iis.net/learn/extensions/troubleshooting-application-request-routing/troubleshooting-502-errors-in-arr

Я обнаружил, что мне нужно отследить, используя netsh провайдеров WinHttp/WebIO, чтобы получить реальный код ошибки, который сопоставлен с кодом ошибки 12002.

Я запускаю трассировку, как предполагает статья:

netsh trace start scenario=internetclient capture=yes persistent=no level=verbose tracefile=c:\temp\net.etl

Анализируя вывод следов netsh, я не получаю тот уровень информации, который мне предлагает статья. В частности, я получаю только следующие типы записей в трассировке, просматриваемой с помощью netmon:

WINHTTP_MicrosoftWindowsWinHttp:Stopping WorkItem Thread Action...
WINHTTP_MicrosoftWindowsWinHttp:Starting WorkItem Thread Action...
WINHTTP_MicrosoftWindowsWinHttp:Queue Overlapped IO Thread Action...

Я, конечно, не получаю ничего достаточно подробного, что помогло бы мне понять, почему я получаю тайм-ауты.

Есть ли какая-либо причина, по которой Server 2012 не отслеживает API WinHttp до необходимого мне уровня?

Спасибо

1 ответ

Согласно http://support.microsoft.com/kb/193625 и упоминается на странице, на которую вы ссылаетесь, код ошибки win32 12002 указывает на тайм-аут. Встроенное время ARR составляет 30 секунд, и если какой-либо запрос занимает более 30 секунд, то ARR отключится и выдаст 502,3. Если это произойдет, вы сможете просмотреть журналы IIS на своем сервере ARR и увидеть, что запросы, которые 502.3 занимают 30 секунд (или вы можете просто синхронизировать запрос вручную).

Если для 30-секундного тайм-аута по умолчанию у вас мало времени, вы можете изменить его вручную в файле ApplicatoinHost.config под элементом. По умолчанию свойство timeout отсутствует. Пример элемента с таймаутом, заданным как 1 минута, выглядит следующим образом:

<webFarms>
    <webFarm name="Example Farm" enabled="true">
        <server address="webServer1" enabled="true" />
        <server address="webServer2" enabled="true" />
        <applicationRequestRouting>
            <protocol timeout="00:01:00" />
        </applicationRequestRouting>
    </webFarm>
    <applicationRequestRouting>
        <hostAffinityProviderList>
            <add name="Microsoft.Web.Arr.HostNameRoundRobin" />
            <add name="Microsoft.Web.Arr.HostNameMemory" />
        </hostAffinityProviderList>
    </applicationRequestRouting>
</webFarms>

Как всегда, вы должны сделать резервную копию этого файла перед его редактированием.

Другие вопросы по тегам