【问题标题】:IIS Application Pools fail in 32 Bit Mode in Windows 10IIS 应用程序池在 Windows 10 中的 32 位模式下失败
【发布时间】:2017-01-03 19:28:03
【问题描述】:

在我的开发机器上,每当我将 IIS 应用程序池设置为以 32 位模式运行时,任何启动的 Web 应用程序都会挂起。在浏览器中访问时,应用程序将“挂起”大约 5-10 秒,然后收到 503 错误。该应用的应用程序池将在此时停止,并且必须明确重新启动。

在 64 位(默认)模式下一切正常,但只要将池切换到 32 位,它就会立即挂起,即使是在新网站的静态页面上也是如此。

当以 32 位模式发布到我的实时服务器时,相同的应用程序运行良好,因此这似乎是某种配置问题。我已启用失败的请求跟踪,但日志中没有显示任何内容。

由于一些旧的 COM 依赖项,我有几个必须运行 32 位的应用程序,但我无法让服务器运行。

任何想法可能导致此问题?

【问题讨论】:

  • 当您说挂起时,究竟发生了什么浏览器无限旋转或页面加载缓慢?
  • 两件事:你检查过事件日志吗?您的应用程序中是否有任何 64 位的程序集?
  • 也许 32 位 COM 未注册或无法正常工作?您是否还使用 cmd 命令 => sfc /scannow 检查了您的 Windows 是否未损坏?

标签: iis 32-bit application-pool


【解决方案1】:

好的,我发现了问题,这是在 IIS 模块列表中注册了 64 位版本但没有位数值的 AspNetCore 模块。

这个问题不是 AspNetCoreModule 特有的,只是在安装模块时没有指定 bitness64(对于 64 位版本)。如果没有位值,即使在 32 位模式下,模块也会加载并导致服务器崩溃。

另一个故障点是 IIS 重写模块,当 Windows 更新时,它会因为类似的原因而被破坏。每次 Windows 更新重写模块都会为我中断 IIS(32 位和 64 位)。这是最初的失败和事件日志条目。重新安装 Rewrite 模块后,AspNetCoreModule 错误开始出现在事件日志中。我的博客上有更多关于该问题的信息:https://weblog.west-wind.com/posts/2015/jul/05/windows-10-upgrade-and-iis-503-errors

为了修复 AspNetCore 模块的位数,我更改了 Applicationhost.config 中的位数:

<add name="AspNetCoreModule" image="%SystemRoot%\system32\inetsrv\aspnetcore.dll" preCondition="bitness64" />

请注意precondition=bitness64,这是使 32 位 AppPools 再次工作所需的全部内容,因为这会阻止模块加载到 32 位进程中。重新安装 AspNet Server 运行时可能也可以解决此问题,但我没有对此进行验证。

当应用启动时出现 503 错误时,它们通常与应用程序池相关,不会出现在 FREB 日志中。 EventLog 确实有更多信息,在这种情况下首先指向 Rewrite Module,然后指向 AspNet Core Module。

【讨论】:

  • 我遇到了完全相同的问题和症状,AspNetCore 和 Rewrite 都没有位。我是通过查看事件日志发现的。谢谢瑞克!
  • 这里有同样的问题,但事件日志只包含一个关于缺少模块的错误,但没有命名模块。通过检查 applicationhost.config 中的 globalModules 部分以及 syswow64/inetsrv 中列出的 dll 的存在,我发现 aspnetcore.dll 丢失了。我检查了另一台手动安装了 AspNetCore 而不是 VS 的 PC。在那台电脑上,syswow64/inetsrv 中有一个 aspnetcore.dll。我把那个 dll 复制到我的电脑上,问题就解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2016-03-02
  • 2020-03-04
相关资源
最近更新 更多