在Windows 10中,以32位模式运行的IIS应用程序池失败

10
在我的开发机上,每当我将一个IIS应用程序池设置为32位模式时,任何Web应用程序启动都会简单地挂起。在浏览器中访问应用程序将会'挂起'约5-10秒钟,然后收到503错误。应用程序池此时将被停止,并且必须显式重新启动。
在64位(默认)模式下一切正常,但是无论是新的还是空的Web站点上的静态页面,在将池切换到32位模式时立即挂起。
相同的应用程序在以32位模式发布到我的生产服务器时运行良好,因此似乎这是某种配置问题。我已经启用了失败请求跟踪,但日志中没有显示任何内容。
我有几个应用程序必须由于一些旧的COM依赖项运行在32位,但我无法使服务器运行。
有什么想法可能会导致这个问题吗?

当你说“挂起”时,到底会发生什么?是浏览器无限旋转还是页面加载缓慢? - Ravi A.
两件事情:您是否检查了事件日志?您的应用程序中是否有任何64位的程序集? - Pankaj Kapare
也许32位的COM组件没有注册或者无法工作?另外,您是否检查过您的Windows系统是否损坏,可以使用cmd命令=> sfc /scannow进行检查。 - Cerveser
1个回答

9

好的,我找到了问题所在,问题出在AspNetCore模块上。在IIS模块列表中,64位版本没有指定位数值。

这个问题不仅仅是针对AspNetCore模块的,只是因为该模块安装时没有指定64位位数值。没有位数值,该模块即使在32位模式下加载也会导致服务器崩溃。

另一个故障点是IIS Rewrite模块,当Windows更新时,它也因类似原因而崩溃。每次Windows更新后,Rewrite模块都会破坏我的IIS(32位和64位)。这是最初的故障和事件日志条目。重新安装Rewrite模块后,AspNetCore模块错误开始在事件日志中显示。我在我的博客上有更多关于此问题的信息: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日志中。事件日志具有更多信息,在这种情况下首先指向了Rewrite模块,然后指向了AspNet Core模块。

我曾经遇到过完全相同的问题和症状,AspNetCore和Rewrite都没有位数限制。通过查看事件日志,我发现了这一点。感谢Rick! - Jorge Yanes Diez
这里也遇到了同样的问题,但事件日志只显示了一个有关缺少模块的错误,但没有提及该模块的名称。通过检查applicationhost.config中的globalModules部分以及syswow64/inetsrv中所列出的dll文件的存在性,我发现aspnetcore.dll丢失了。我检查了另一台手动安装了AspNetCore而非使用VS的PC。在那台PC上,syswow64/inetsrv中有一个aspnetcore.dll。我将该dll文件复制到我的PC上,问题解决了。 - NicolasR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接