当“启用 32 位应用程序”设置为 true 时无法访问服务

DrK*_*och 0 web-services windows-server-2008 iis-7.5 .net-4.5

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

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

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

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

(相同的 IIS 版本,相同的操作系统版本)

一旦我设置了“启用 32 位应用程序”,就无法在浏览器中访问该服务的URL。(页面不可用)

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

什么可能导致这些问题?

任何想法,提示,建议?


编辑

更多细节:

“IIS 工作进程”作为“w3wp.exe *32”运行

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

事实上,这个 32Bit App-Pool 的所有页面都产生了相同的行为 (HTTP 500) 页面未找到。

DrK*_*och 5

步骤 1:在 IIS 中启用登录

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

控制面板->程序和功能->打开或关闭Windows功能

您需要安装两个功能:

WebServer->Common Http Features->HTTP Errors

WebServer-> Health an Diagnostics->HTTP Logging

步骤 2:分析错误消息

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

HTTP 错误 500.19

动态压缩模块

错误代码 0x8007007e

第 3 步:解码错误代码

我使用Microsoft Exchange Server 错误代码查找错误代码转换为更有用的内容:

C:\Users\combyte>err 0x8007007e

作为 HRESULT:严重性:失败 (1),设施:0x7,代码 0x7e

...

ERROR_MOD_NOT_FOUND winerror.h

指定的模块无法找到。

事实证明,未安装特定的 DLL。就我而言,WSUS(Windows 服务器更新服务)的安装仅安装了 64 位版本的 DynamicCompressionModule (C:\Windows\system32\inetsrv\suscomp.dll)。

解决方案1

使用以下命令从 IIS 配置(对于所有页面/应用程序池)中删除/禁用 XPress 压缩方案:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress']
Run Code Online (Sandbox Code Playgroud)

解决方案2

xpressC:\Windows\System32\inetsrv\config\ApplicationHost.config32 位应用程序池的IIS 配置文件中禁用模块加载:

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

<add name="DynamicCompressionModule" lockItem="true" preCondition="bitness64" />
Run Code Online (Sandbox Code Playgroud)

解决方案3

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