"Enable 32-Bit Applications" 设置为 true 时无法访问服务

Service not accessible when "Enable 32-Bit Applications" set to true

在开发服务器上 我使用 IIS Veresion 7.5.7600.16385

以及为 .Net 4.5.1 编译的服务,任何 CPU

该服务在开发服务器 (Win Server 2008 R2) 上运行良好。

在客户端的生产服务器上但是我遇到了奇怪的问题:

(相同的 IIS 版本,相同的 OS 版本)

一旦我设置 "Enable 32-Bit Applications",服务的 URL 就无法再在浏览器中访问 。 (页面不可用)

(我需要 32 位模式,因为该服务使用了一些遗留的 COM 组件)

什么可能导致这个问题?

有什么想法、提示、建议吗?


编辑

更多详情:

"IIS Worker Process" 是 运行 作为 "w3wp.exe *32"

同一个应用程序池中有一个 ClickOnce 安装,其行为相同:在 64 位中工作正常,如果 32 位设置为 true,则无法访问。

事实上,这个 32 位应用程序池的所有页面都产生相同的行为 (HTTP 500) 找不到页面。

步骤 1:在 IIS 中启用登录

为了在 IIS 中启用更好的错误消息和日志文件,您必须安装两个功能:

Control Panel->Programs and Features->Turn Windows features on or off

您需要安装两个功能:

WebServer->Common Http Features->HTTP Errors

WebServer-> Health an Diagnostics->HTTP Logging

步骤 2:分析错误消息

启用 HTTP 错误后,当我访问 32 位应用程序池中的任何页面时,我收到了更详细的消息:

HTTP Error 500.19

DynamicCompressionModule

ErrorCode 0x8007007e

步骤 3:解码错误代码

我使用 Microsoft Exchange Server Error Code Look-up 将 ErrorCode 转换为更有用的东西:

C:\Users\combyte>err 0x8007007e

as an HRESULT: Severity: FAILURE (1), Facility: 0x7, Code 0x7e

...

ERROR_MOD_NOT_FOUND winerror.h

The specified module could not be found.

事实证明,没有安装特定的 DLL。在我的例子中,WSUS(Windows 服务器更新服务)的安装仅安装了 64 位版本的 DynamicCompressionModule (C:\Windows\system32\inetsrv\suscomp.dll)。

解决方案1

Remove/Disable IIS 配置中的 Xpress 压缩方案(对于所有 pages/app-pools)使用此命令:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress']

解决方案2

禁止在 IIS 配置文件 C:\Windows\System32\inetsrv\config\ApplicationHost.config 中为 32 位应用程序池加载 xpress 模块:

<modules> 部分的 xpress 模块添加属性 preCondition="bitness64":

<add name="DynamicCompressionModule" lockItem="true" preCondition="bitness64" />

解决方案3

将 32 位版本的 suscomp.dll(来自 WSUS 的 32 位安装)安装到 %windir%\SYSWOW64\inetsrv\