当“启用32位应用程序”不可用时,服务不可访问设置为true [英] Service not accessible when "Enable 32-Bit Applications" set to true

查看:762
本文介绍了当“启用32位应用程序”不可用时,服务不可访问设置为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中禁用 xpress 模块的加载\config\ApplicationHost.config (用于32位应用程序池):

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆