当“启用32位应用程序”不可用时,服务不可访问设置为true [英] Service not accessible when "Enable 32-Bit Applications" set to true
问题描述
在开发服务器上,我使用IIS Veresion 7.5.7600.16385
On the development server I use IIS Veresion 7.5.7600.16385
和为.Net 4.5.1编译的服务,任何CPU
And a Service compiled for .Net 4.5.1, Any CPU
该服务在开发服务器(Win Server 2008 R2)上运行良好。
The service works fine on the development server (Win Server 2008 R2).
在客户端的生产服务器,但是我遇到奇怪的问题:
On the client's production server however I get strange problems:
(相同的IIS版本,相同的操作系统版本)
(Same IIS Version, same OS version)
设置启用32位应用程序后,该服务的 URL将无法在浏览器中访问。 (页面不可用)
As soon as I set "Enable 32-Bit Applications" the service's URL is no longer accessible in a browser. (Page not available)
(我需要32Bit模式,因为该服务使用了一些旧版COM组件)
(I need the 32Bit mode because the service uses some legacy COM components)
是什么导致此问题?
有任何想法,提示和建议吗?
Any ideas, hints, suggestions?
编辑
更多详细信息:
IIS Worker进程以 w3wp.exe运行* 32
The "IIS Worker Process" is running as "w3wp.exe *32"
在同一应用程序池中有一个ClickOnce安装,其行为相同:64位工作正常,如果32Bit设置为true,则无法访问。
There is a ClickOnce Installation in the same Application Pool which behaves the same: works ok in 64 bit, not accessible if 32Bit set to true.
实际上,此32Bit App-Pool的所有页面都产生相同的行为(HTTP 500)页面。
In fact all pages of this 32Bit App-Pool produce the same behaviour (HTTP 500) page not found.
推荐答案
步骤1:启用IIS中的登录
为了在IIS中启用更好的错误消息和日志文件,您必须安装两个功能:
In Order to enable better error messages and log files in IIS you must install two Features:
控制面板->程序和功能->打开或关闭Windows功能
Control Panel->Programs and Features->Turn Windows features on or off
您将需要安装两个功能:
You'll need two features installed:
WebServer-> Common Http Features -> HTTP错误
WebServer->Common Http Features->HTTP Errors
WebServer->运行状况诊断s-> HTTP记录
WebServer-> Health an Diagnostics->HTTP Logging
步骤2:分析错误消息
启用HTTP错误后,当我访问32Bit应用程序池中的任何页面时,我收到一条更详细的消息:
With HTTP Errors enabled I got a more verbose message when I accessed any page in the 32Bit App Pool:
HTTP错误500.19
HTTP Error 500.19
DynamicCompressionModule
DynamicCompressionModule
ErrorCode 0x8007007e
ErrorCode 0x8007007e
第3步:解码错误代码
我使用了 Microsoft Exchange Server错误代码查询可以将ErrorCode转换为更有用的内容:
I used Microsoft Exchange Server Error Code Look-up to convert the ErrorCode into something more useful:
C:\Users\combyte> err 0x8007007e
C:\Users\combyte>err 0x8007007e
作为结果:严重性:失败( 1),功能:0x7,代码0x7e
as an HRESULT: Severity: FAILURE (1), Facility: 0x7, Code 0x7e
...
ERROR_MOD_NOT_FOUND winerror.h
ERROR_MOD_NOT_FOUND winerror.h
找不到指定的模块
原来,没有安装特定的DLL。就我而言,安装WSUS(Windows服务器更新服务)仅安装了64位版本的DynamicCompressionModule(C:\Windows\system32\inetsrv\suscomp.dll)。
It turned out, that a specific DLL was not installed. In my case the installation of WSUS (Windows Server Update Services) installed a 64Bit version of DynamicCompressionModule (C:\Windows\system32\inetsrv\suscomp.dll) only.
解决方案1
使用此命令从IIS配置(对于所有页面/应用程序池)中删除/禁用XPress压缩方案:
Remove/Disable the XPress compression scheme from the IIS configuration (for all pages/app-pools) using this command:
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress']
解决方案2
在IIS配置文件 C:\Windows\System32\inetsrv中禁用
(用于32位应用程序池): xpress
模块的加载\config\ApplicationHost.config
Disable loading of the xpress
module in IIS config file C:\Windows\System32\inetsrv\config\ApplicationHost.config
for 32Bit App-Pools:
添加属性 preCondition = bitness64
到< modules>
部分的xpress模块:
add attribute preCondition="bitness64"
to the xpress module in section <modules>
:
<add name="DynamicCompressionModule" lockItem="true" preCondition="bitness64" />
解决方案3
将32位版本的 suscomp.dll
(从WSUS的32位安装)安装到%windir%\SYSWOW64\inetsrv\
Install the 32Bit version of suscomp.dll
(from a 32 Bit Installation of WSUS) into %windir%\SYSWOW64\inetsrv\
这篇关于当“启用32位应用程序”不可用时,服务不可访问设置为true的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!