我有以下情况:
3 个 Windows Server 2012 虚拟服务器,全部配备 IIS 8:
- 1 台带有应用程序请求路由 3 的服务器
- 2 台服务器,其中包含 ARR 服务器路由到的 Web 应用程序
我收到间歇性 502 3 12002 错误。
我已经确定我需要使用 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 不能将 WinHttp API 跟踪到我需要的级别?有什么原因吗?
谢谢
答案1
根据http://support.microsoft.com/kb/193625,并在您链接的页面中提到,win32 错误代码 12002 表示超时。ARR 内置 30 秒超时,如果任何请求花费的时间超过 30 秒,则 ARR 将超时并抛出 502.3。如果发生这种情况,您应该能够查看 ARR 服务器上的 IIS 日志,并查看 502.3 请求花费了 30 秒(或者您可以手动计时请求)。
如果默认的 30 秒超时时间对您来说太短,那么您可以在元素下的 applicatoinHost.config 文件中手动更改它。默认情况下,不存在超时属性。将超时时间指定为 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>
与往常一样,您应该在编辑之前备份此文件。