欢迎光临,这里是 gOxiA=苏繁=SuFan 独立的个人博客。
本站域名:http://goxia.maytide.net or http://sufan.maytide.net
移动设备请访问:http://goxia.maytide.net/m
转载文章,请务必保留出处与作者信息,未经许可严禁用于商业用途!

IIS7_Welcome

解决因开启 32BitApponWin64 后出现的 HTTP 503 故障问题

        自从离开 Hosting 行业,好久没有做过 IIS 方面的排错,今天算是遇到了一个,感觉会很常见,所以记录下来以备后用。用户购买了一套 ASP+Access 的小程序(PS:别问为什么还要买这么老旧的架构程序!),配置到用户的 Windows Server 2012 Essentials 环境中运行正常,操作过程并无什么特别,只是为其应用池开启 32位程序支持即可,整个过程非常顺利。

        反而在之后配置到 gOxiA 的 Windows Small Business Server 2011 Standard 环境中后一直无法正常运行,IE 访问时提示“Service Unavailable”,经典的 HTTP 503 故障。起初检查 IIS 配置没有发现异常,但是看到对应的应用池会被停掉。于是打开事件查看器查阅日志,发现了很多来源为“IIS-W3SVC-WP”的错误,其内容大致如下:

由于配置问题,无法加载模块 DLL “C:Program FilesMicrosoftExchange ServerV14ClientAccessOwaauthexppw.dll”。当前配置仅支持加载为 x86 处理器架构构建的映像。……”此外,除了 exppw.dll 文件外还有 kerbauth.dll 也出现错误。

1

        综上分析,应用程序池的 32位应用支持是正常打开了,但是却无法加载 64位的 DLL 文件。而关闭“enable32BitAppOnWin64”后应用程序池恢复正常,但无法访问 ASP 程序。那么原因应该是出在应用程序池和加载模块的问题上。“exppw.dll”和“kerbauth.dll”文件都属于服务器上的 Exchange Server 2010 所有,这两个文件本身肯定是没有问题的。

        看来还是要锁定到应用程序池方面,应用程序池本身是64位的,只是开启了32位应用支持,所以应用程序池在设置后是正常运行状态。当触发访问请求时,该应用程序池会启动一个新的32位模式的进程,来接受 ASP 类型的访问请求,此时就会导致 32位应用程序池进程(w3wp.exe)与加载的 64位 DLL 出现系统策略上的冲突,被系统强行终止,最终出现前面所述的故障。

        要解决这个故障貌似挺难的,难不成跑了64位应用(Exchange Server 2010)的服务器就不能跑 32位 的 ASP 程序了?!看来只能网上找找是否有相关的资料,这还真的找到了!参考资料:http://blogs.msdn.com/b/rakkimk/archive/2007/11/03/iis7-running-32-bit-and-64-bit-asp-net-versions-at-the-same-time-on-different-worker-processes.aspx

        文中末尾提到可以修改“applicationHost.config”文件,为加载的 DLL 指定对应架构模式的 ISAPI Filter 来运行。即,在每个 DLL 加载配置行尾附加“preCondition”参数,如果该 DLL 是 32位那值为“bitness32”,而 64位的则是“bitness64”。修改后的结果可以参考下图:

2

        针对本例,我们需要修改的有两个:“exppw.dll”和“kerbauth.dll”。最后测试一下结果,网站已经能够正常访问,至此故障消失问题得到了解决!同样,有遇到类似故障的都可参考此法解决。

logo-windows-server-2008-r2

HOWTO:使用 Web Deploy 便捷发布网站程序

IIS7_Welcome

        gOxiA 最近找了一个 .NET 的开源网站程序,改吧改吧当作企业网站来用,该网站程序需要 SQL Server,由于改动比较简单所以没打算使用复杂的开发环境,WebMatrix 就成了不二之选!借助 Web Deploy 技术,在发布网站的同时还能将数据库一并发布,简单快捷,并且无需在 Web Server 上安装 FTP。

        Web Deploy 是 IIS 的一个插件,最新版本是 v3.0 Beta,本篇日志将以 Web Deploy 2.0 为例与大家分享,Web Deploy 可以从 Microsoft Download Center 获得,下载地址如下:

Web deploy 2.0 简体中文版:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=cfa66d50-90ce-49cba-b021-fefbd7a302ab

        Web Deploy 的安全访问机制和访问接口都依赖于 IIS 的“管理服务”组件,所以要使用 Web Deploy 必须先安装  IIS 的“管理服务”。为此,首先打开“服务器管理器”添加角色服务,整个安装过程非常简单不再复述,可参考下图:

11-1

        在“管理服务”安装完毕后即可执行 Microsoft Web Deploy 2.0 的安装程序,过程依旧非常简单一路“下一步”即可,过程可参考下图:

22-12-23

        Web Deploy 安装完毕后,便可进行下一步的配置过程。首先请确认“管理服务”是否已经在运行,如下图所示:

9

        之后进入“IIS 管理器用户”添加一个账号,这个账号是基于 IIS 的,并非 Windows 账号,所以在安全方面会更强一些。

4

        下来,就可以为需要使用 Web Deploy 的站点添加管理账号了。选中一个站点,进入“IIS 管理器权限”,在操作窗体中点击“允许用户…”,之后从 IIS 管理器中添加用户即可。

56

        最后,便可在 WebMatrix 中的发布设置中选择“Web Deploy”,其中“服务器”填写 Web Server 的 IP 地址,“用户名”、“密码”即是之前在“IIS 管理器用户”添加的信息,而“网站名称”需要填写的是与 IIS 里站点对应的名称,如果当前 WebMatrix 站点配置有数据库,那么还可以在发布设置下通过 Web Deploy 配置数据库信息,使发布网站的同时也将数据库传递给 Web Server。

7

        上述步骤完成后点击“验证连接”,因为当前 Web Server 使用了自签名证书,所以会有如下图的警告提示,我们只需复选“为 WebMatrix 的将来会话保存此证书”,并点击“接受证书”便可继续连接。

8

        Web Deploy 的功能非常强大,除了 WebMatrix,还能利用微软的 Visual Studio 实现更为便捷、高效、智能的网站发布。由于 gOxiA 不是专业的开发人员,所以 Web Deploy 更多的经验恐怕无法与大家分享。

        最后,关于 Web Deploy 使用“IIS 管理器用户”时的目录安全权限方面的经验再与大家分享一下,根据实际的测试当使用“IIS 管理器用户”进行 Web Deploy 发布时,目录权限要添加“Local Service”账号有修改权限。此外,如果你希望使用 WebMatrix 来检查网站兼容性,那么还需要为 Web Server 上的网站所在目录添加“Service”账号有读取权限。

logo-windows-server-2008-r2  Internet Information Services (IIS)

在 IIS 7.x 上启用 32bit 应用支持

IIS7_Welcome

        一个朋友的公司近期要新上线一套 Web 应用系统,这几天开始进行评估测试。这套网站基于 DotNET 2.0 开发,使用的是 MSSQL 数据库。于是我们选择了 Windows Web Server 2008 R2 作为操作系统,SQL Server 2008 R2 Express 作为数据库。系统环境的准备工作都很顺利,由于网站是成品所以需要先上传数据并通过浏览器进行安装。没想到在打开网站时提示如下图的错误信息:

v5mall_64bit_error_1

        从错误信息看,是没能找到 V5Mall.Run64.dll 文件。于是首先想到的是去网上搜索一下是否有相关解决方案,并让朋友尽快联系官方技术支持。一天过去了,对方也没给回复,网上找到的相关信息也都来自其官方论坛,说是因为权限问题导致的,但这点可以排除,我的设置是没问题的。比较离谱的是看到论坛最终的解答是让更换虚拟主机提供商!说此问题是因为虚拟主机提供商的服务器与他们的网站程序不兼容。我晕!这个解决办法明显不适合我们,并且也不是个解决办法!已经习惯了国内开发商的产品和服务质量……还是自己动手吧。

        冷静分析了一下故障错误,既然提示“无法加载 DLL “V5Mall.Run64.dll”:找不到指定的模块。(异常来自 HRESULT:0x8007007E)。”那么首先检查是否有“V5Mall.Run64.dll”这个文件。经查网站下确实无此文件,并且官方也未提供。但是该网站程序又可以运行在“其他”服务器上,如:Windows Server 2003。说明网站程序确实与当前系统环境有兼容性问题,而这个兼容性问题应该是 64bit 操作系统所致。

        回忆起自己曾摘抄过一篇文章《Configuring IIS to Run 32-bit Applications on 64-bit Windows (IIS 6.0)》,既然如此那 Windows Web Server 2008 R2 上的 IIS 7.5 也能够启用 32bit 应用支持,这样就可以避免程序去调用“V5Mall.Run64.dll”,使应用以 32bit 方式运行。

        在 IIS 7.x 中,要“启用 32bit 应用程序支持”,需要对“应用程序池”进行配置。将“enable32BitAppOnWin64”设置为“True”。这样便将应用程序池的工作进程设置为 WOW64 模式,而在 WOW64 模式下,工作进程将仅加载 32 位应用程序的 32 位进程。为了避免影响其他网站,可为 32bit 应用程序的网站单独创建一个应用程序池。下面 gOxiA 将引导大家如何在 IIS 7.x 下启用 32bit 应用程序支持。

  • 为 32bit 应用程序的网站单独创建一个应用程序池,操作过程省略……;
  • 打开“Internet 信息服务 (IIS) 管理器”在左侧窗体中展开服务器列表,找到该网站对应的应用程序池;
  • 选中应用程序池,并在右边操作窗体中点击“高级设置…”;
  • 在“(常规)”设置中找到“启用 32 位应用程序”,并将其设置改为“True”

v5mall_64bit_error_2

        最后确定并完成操作。在 64bit 的 Windows 操作系统上,IIS 7.x 中“启用 32 位应用程序”的默认设置是“False”,为了方便配置和应用,可以通过“设置应用程序池默认设置…”进行统一的修改,这样以后新建的网站应用程序池都将启用 32bit 应用程序支持。

        此外,我们也可以利用命令行进行设置,命令行参考如下:

appcmd set apppool /apppool.name:My32bitApp /enable32bitapponwin64:true

        大家如果也有类似的故障错误,可以用此办法解决。

分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]