[机器环境]
DB : Sql server 2000
IDE : Microsoft visual studio 2003, 2005
OS : Windows XP
[问题现象]
安装完IIS,发布好应用后,浏览该应用,浏览器报“Page 500错误”。打开IDE,F5启动调试,弹出窗口提示:“MMC检测到此管理单元发生一个错误,建议关闭并重新启动MMC”,点确定后,提示页面500错误。
[尝试]
网上有相关帖子:
http://www.wenda.com.cn/tech/view.php?ID=1882
http://www.tzlink.com/bbs/thread-362-1-1.html
原因说起来,挺像回事的:
IWAM账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用,账号密码被三方分别保存,并由操作系统负责这三方保存的IWAM密码的同步工作。但系统的对IWAM账号的密码同步工作有时会失败,使三方IWAM账号所用密码不统一。当IIS或COM+应用程序使用错误IWAM的密码登录系统,启动IIS Out-Of-Process Pooled Applications时,系统会因密码错误而拒绝这一请求,导致IIS Out-Of-Process Pooled Applications启动失败,也就是我们在ID10004错误事件中看到的
“不能运行服务器{3D14228D-FBE1-11D0-995D-00C04FD919C1} ”(这里{3D14228D-FBE1-11D0-995D-00C04FD919C1} 是IIS Out-Of-Process Pooled Applications的KEY),不能转入IIS5应用程序,HTTP 500内部错误就这样产生了。
照着帖子中的步骤,我将MSDTC的服务重新安装了一遍,没有效果;又将IIS Metabase与IWAM_MYSERVER的账户重新设置,并同步了一遍,问题仍然存在。
尝试步骤如下:
[重新安装MSDTC服务]
1. 打开DOS命令窗口,输入"msdtc -uninstall"回车,卸载MSDTC服务。
2. 输入命令“msdtc -install”回车,安装服务。
3. 输入命令“msdtc -resetlog”回车,重置日志。
4. 输入命令“net start msdtc”回车,启动服务。
3. 从控制面板->管理工具中,打开组件服务,依次展开:组件服务->计算机->我的电脑,右键单击“我的电脑”,选择属性
4. 在弹出窗口中选择MSDTC选项卡,点击“安全性配置”,勾上“网络DTC访问”,“允许远程客户端”,“允许远程管理”,“允许入站”,“允许出站”,“不要求进行验证”,“启动事务Internet协议(TIP)事务”,“启动XA事务”,点击确定。
5. MSDTC服务重启,并成功。
[同步IIS账户与IWAM_MYSERVER账户的密码]
1. 右键点击桌面“我的电脑”(非快捷方式),选择“管理(G)”,弹出窗口中,展开本地用户组和组,在用户中找到IWAM_MYSERVER账户(实际名字为IWAM_你的机器名),右键点击该用户,选择设置密码,这里设置为“123456”.
2. 打开DOS命令窗口,使用CD命令,进入c:/inetpub/adminscripts/目录
3. 目录下输入命令“adsutil.vbs set w3svc/wamuserpass "1234456"”即可同步两个账户的密码,如果系统提示:
wamuserpass: (string) "******"
说明同步成功。
[问题解决]
我列出尝试的目的在于,我并不确定尝试中的两个步骤对于解决问题有没有帮助,同时也至少说明了一个思路。
我是在作出以下的尝试后,解决问题的:
1. 单击 开始 , 单击 运行 , 类型 mmc然后单击 确定 。
2. 在 文件 菜单上, 单击 " 添加/删除管理单元 。
3. 在 添加/删除管理 - 中 对话框中, 单击 添加 。
4. 在 可用的独立管理单元 列表, 选择 WMI 控制 , 并单击 确定 。
5. 打开CMD,进入 C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322 输入 “aspnet_regiis”
做到前4个步骤时,问题依然存在,但当我注册完执行IIS版本注册命令后,问题得到解决。猜想,可能是机器安装了两个版本的.net framwork,导致应用所使用的framwork与当前注册的版本不一致所造成的。
[一些延伸]
从以往的经验来看,我确实在发布应用的时候,常碰到:当发布了两个基于不同.net framwork版本的应用,并使用了默认的应用池(DefaultAppPool)时,就会只要一个应用生效,另一个应用就失效的问题。
那种情况,我们在发布的时候,尽量让不同版本的应用使用不同的应用池,即可。