在开发服务器上我使用iis veresion 7.5.7600.16385
和为.NET 4.5.1编译的服务,任何CPU
该服务在开发服务器上正常运行(Win Server 2008 R2)。
在客户端的生产服务器上我遇到了奇怪的问题:
(相同的IIS版本,相同的OS版本)
我一旦设置"启用32位应用程序",在浏览器中不再访问服务的 URL。(页面不可用)
(我需要32位模式,因为该服务使用一些旧版COM组件)
什么可能导致此问题?
有什么想法,提示,建议?
编辑
更多详细信息:
" IIS工作过程"以" w3wp.exe *32"
运行在同一应用程序池中有一个ClickOnce安装,其行为相同:在64位中运行正常,如果32位设置为true,则无法访问。
实际上,该32位应用程序的所有页面都找不到相同的行为(http 500)页面。
步骤1:启用IIS
为了在IIS中启用更好的错误消息和日志文件,您必须安装两个功能:
控制面板 - >程序和功能 - >打开或关闭Windows功能
您需要安装两个功能:
Weberver->常见的HTTP功能 - > http错误
web服务器 - >健康诊断 - > http记录
步骤2:分析错误消息
启用了HTTP错误,当我访问32bit App池中的任何页面时,我收到了更多的冗长消息:
http错误500.19
dynamicCompressionModule
错误代码0x8007007e
步骤3:解码错误代码
我使用Microsoft Exchange Server错误代码查找将错误代码转换为更有用的东西:
c: users combyte> err 0x8007007e
作为hresult:严重性:失败(1),设施:0x7,代码0x7e
...
error_mod_not_found winerror.h
找不到指定的模块。
事实证明,没有安装特定的DLL。在我的情况下,WSUS(Windows Server Update Services)的安装安装了DynamicCompressionModule的64位版本(C: Windows System32 Inetsrv suscomp.dll)。
解决方案1
使用此命令从IIS配置(对于所有页面/App-Pools)中删除/禁用XPRESS压缩方案:
%windir%system32inetsrvappcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress']
解决方案2
禁用IIS配置文件中xpress
模块的加载C:WindowsSystem32inetsrvconfigApplicationHost.config
for 32bit App-Pools:
将属性preCondition="bitness64"
添加到<modules>
中的Xpress模块:
<add name="DynamicCompressionModule" lockItem="true" preCondition="bitness64" />
解决方案3
将suscomp.dll
的32位版本(从WSU的32位安装)安装到%windir%SYSWOW64inetsrv