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

IIS应用程序池在Windows 10中以32位模式失败,iis,32-bit,application-pool,Iis,32 Bit,Application Pool,在我的开发机器上,每当我将IIS应用程序池设置为以32位模式运行时,任何启动的Web应用程序都将挂起。在浏览器中访问时,该应用程序将“挂起”约5-10秒,然后收到503错误。应用程序的应用程序池将在该点停止,并且必须显式重新启动 在64位(默认)模式下,一切正常,但只要池切换到32位,它就会立即挂起,即使在新的或空的网站中的静态页面上也是如此 同样的应用程序在以32位模式发布到我的live server时运行良好,因此这似乎是某种配置问题。我启用了失败的请求跟踪,但日志中没有显示任何内容 由于一

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

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

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

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


你知道是什么导致了这个问题吗

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

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

另一个失败点是IIS重写模块,当Windows更新时,由于类似的原因,该模块会被关闭。每次Windows更新,重写模块都会为我中断IIS(32位和64位)。这是初始故障和事件日志条目。重新安装重写模块后,事件日志中开始显示AspNetCoreModule错误。我的博客上有关于这个问题的更多信息:

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

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

请注意,
premission=bitness64
,这是使32位应用程序池再次工作所需的全部内容,因为这样可以防止模块加载到32位进程中。重新安装AspNet服务器运行时也可能会修复此问题,但我没有验证这一点


当应用程序启动时发生503个错误时,它们通常与应用程序池相关,不会显示在FREB日志中。事件日志确实有更多信息,在本例中,首先指向重写模块,然后指向AspNet核心模块。

当您说挂起时,究竟发生了什么?浏览器无限旋转还是页面加载缓慢?两件事:您是否检查了事件日志?您的应用程序中是否有64位的程序集?可能是32位COM未注册或不工作?另外,您是否使用cmd command=>sfc/scannow检查了您的Windows是否已损坏?我遇到了完全相同的问题和症状,AspNetCore和Rewrite都没有bitness。我通过查看事件日志发现了这一点。谢谢你,瑞克!这里也有同样的问题,但事件日志只包含一个关于丢失模块的错误,但没有命名该模块。通过检查applicationhost.config中的globalModules部分以及syswow64/inetsrv中是否存在列出的dll,我发现缺少aspnetcore.dll。我检查了另一台电脑,其中AspNetCore是手动安装的,而不是由VS安装的。在这台电脑上,syswow64/inetsrv中有一个AspNetCore.dll。我把那个dll复制到我的电脑上,问题就解决了。