本站域名:http://goxia.maytide.net or http://sufan.maytide.net
移动设备请访问:http://goxia.maytide.net/m
转载文章,请务必保留出处与作者信息,未经许可严禁用于商业用途!
[SBS]解决因开启 32BitApponWin64 后出现的 HTTP 503 故障问题
解决因开启 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 也出现错误。
综上分析,应用程序池的 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”。修改后的结果可以参考下图:
针对本例,我们需要修改的有两个:“exppw.dll”和“kerbauth.dll”。最后测试一下结果,网站已经能够正常访问,至此故障消失问题得到了解决!同样,有遇到类似故障的都可参考此法解决。
[IIS] HOWTO:使用 Web Deploy 便捷发布网站程序
HOWTO:使用 Web Deploy 便捷发布网站程序
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 的“管理服务”。为此,首先打开“服务器管理器”添加角色服务,整个安装过程非常简单不再复述,可参考下图:
在“管理服务”安装完毕后即可执行 Microsoft Web Deploy 2.0 的安装程序,过程依旧非常简单一路“下一步”即可,过程可参考下图:
Web Deploy 安装完毕后,便可进行下一步的配置过程。首先请确认“管理服务”是否已经在运行,如下图所示:
之后进入“IIS 管理器用户”添加一个账号,这个账号是基于 IIS 的,并非 Windows 账号,所以在安全方面会更强一些。
下来,就可以为需要使用 Web Deploy 的站点添加管理账号了。选中一个站点,进入“IIS 管理器权限”,在操作窗体中点击“允许用户…”,之后从 IIS 管理器中添加用户即可。
最后,便可在 WebMatrix 中的发布设置中选择“Web Deploy”,其中“服务器”填写 Web Server 的 IP 地址,“用户名”、“密码”即是之前在“IIS 管理器用户”添加的信息,而“网站名称”需要填写的是与 IIS 里站点对应的名称,如果当前 WebMatrix 站点配置有数据库,那么还可以在发布设置下通过 Web Deploy 配置数据库信息,使发布网站的同时也将数据库传递给 Web Server。
上述步骤完成后点击“验证连接”,因为当前 Web Server 使用了自签名证书,所以会有如下图的警告提示,我们只需复选“为 WebMatrix 的将来会话保存此证书”,并点击“接受证书”便可继续连接。
Web Deploy 的功能非常强大,除了 WebMatrix,还能利用微软的 Visual Studio 实现更为便捷、高效、智能的网站发布。由于 gOxiA 不是专业的开发人员,所以 Web Deploy 更多的经验恐怕无法与大家分享。
最后,关于 Web Deploy 使用“IIS 管理器用户”时的目录安全权限方面的经验再与大家分享一下,根据实际的测试当使用“IIS 管理器用户”进行 Web Deploy 发布时,目录权限要添加“Local Service”账号有修改权限。此外,如果你希望使用 WebMatrix 来检查网站兼容性,那么还需要为 Web Server 上的网站所在目录添加“Service”账号有读取权限。
[IIS] 在 IIS 7.x 上启用 32bit 应用支持
Internet Information Services (IIS)
在 IIS 7.x 上启用 32bit 应用支持
一个朋友的公司近期要新上线一套 Web 应用系统,这几天开始进行评估测试。这套网站基于 DotNET 2.0 开发,使用的是 MSSQL 数据库。于是我们选择了 Windows Web Server 2008 R2 作为操作系统,SQL Server 2008 R2 Express 作为数据库。系统环境的准备工作都很顺利,由于网站是成品所以需要先上传数据并通过浏览器进行安装。没想到在打开网站时提示如下图的错误信息:
从错误信息看,是没能找到 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”
最后确定并完成操作。在 64bit 的 Windows 操作系统上,IIS 7.x 中“启用 32 位应用程序”的默认设置是“False”,为了方便配置和应用,可以通过“设置应用程序池默认设置…”进行统一的修改,这样以后新建的网站应用程序池都将启用 32bit 应用程序支持。
此外,我们也可以利用命令行进行设置,命令行参考如下:
大家如果也有类似的故障错误,可以用此办法解决。