Server Application Unavailable .net 1.1与.net 2.0共存问题

The WEB Application You Are Attempting To Access On This WEB Server Is Currently Unavailable. Please Hit   The   “Refresh”   Button   In   Your   WEB   Browser   To   Retry   Your   Request.

Administrator   Note:   An   Error   Message   Detailing   The   Cause   Of   This   Specific   Request   Failure   Can   Be   Found   In   The   Application   Event   Log   Of   The   WEB   Server.   Please   Review   This   Log   Entry   To   Discover   What   Caused   This   Error   To   Occur.
头痛,从来没玩过在2003上配置.net+mssql. 问了一下单位的管服务器的老师,也没找到哪里错误.
于是我上网上搜了搜.得到如下结果
首先是这个答案 当然是 肯定的。不作任何处理的默认情况下会出问题!

   各位在同一电脑上同时安装并运行.net 1.1 和 .net 2.0 两个版本的朋友要小心啊!
   您的项目是不是时不时会出现 Server Application Unavailable 错误呢?或者一直连续都出这个错误!
   今天我朋友将其从1.1升级至2.0的项目发布至公司安装有windows 2003的服务器上,结果2.0的项目始终无法成功运行。甚至还造成服务器上正在为全公司服务的基于.net Framework 1.1的web程序出错。他感觉很奇怪,在自己电脑上明明运行的很好啊,怎么一到服务器上就不行了?
    他发布2.0 web程序的过程如下:
    1、在服务器上创建一个目录,然后将发布后的所有Web程序的文件复制到这个新建的目录。
    2、在服务器的IIS上新建一个虚拟目录,然后 将其配置成可以执行脚本的应用程序,(过程与创建.net Framework 1.1版本的程序相同。) 然后,将此虚拟目录的.net Framework 配置成2.0。
     大功告成后,开始访问刚配置的程序,却得到如下错误:

Server Application Unavailable

The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request.

Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.

      之后向我求助,经过仔细阅读了IIS帮助文档,才发现,原来这个错误是由 IIS6 应用程序隔离机制造成的。IIS默认的应用程序隔离机制被称为:“工作进程隔离模式”,在此模式中,应用程序被分为多个组,每个组就是一个“应用程序池” ,每个应用程序池之间是相互隔离的。 隔离的好处当然就是安全啦,稳定啦,等等。IIS中的每个应用程序池由一个“工作进程”分别进行管理,也就是"W3wp.exe" 。如果有多个应用程序池中的程序运行,我们就能看到多个w3wp.exe。 我们平时新建的虚拟目录都默认被指向IIS6的“DefaultAppPool" 中, 所以在默认情况下,不管你有多少个asp.net程序在运行,在“Windows任务管理器”中你只能看到一个w3wp.exe进程。

      出现上述错误的原因是: .net Framework 2.0的程序与.net Framework1.1(或1.0)的程序被放入同一个应用程序池(默认情况下放入DefaultAppPool池),也就是由同一个工作进程: w3wp.exe 进行管理,而单个工作进程是无法同时管理不同的程序(或者不同版本的程序)的。如果先访问.net framework 1.1的页面,则工作进程先加载并管理了 1.1版本的程序集,此时访问.net framework 2.0的web程序页面,Server Application Unavailable 错误就出来了。 反之,如果在默认应用程序池的w3wp.exe尚未启动前先访问了 2.0的web程序(此时应用程序集已经加载了.net framework2.0的Web程序集),再访问1.1或1.0的Web程序页面时,同样会出现“服务器应用程序不可用” 这样的中文提示。(您可以结束掉以前的w3wp.exe进行测试。)
   
    我朋友之所以在自己的开发机器上没出现此错误是因为他在开发基于.net framework 2.0的项目时,一直都只访问这个2.0的web程序,跟本未曾访问过其他web程序。而朋友的服务器上已经存在1.0 的项目,并且一直有人使用。这个错误在今天之前从未碰到过,其实大部分人在开发一个项目时,都只访问正在开发的项目。很有可能就忽略了这个问题,而到了发布的时候却出现错误,搞得手忙脚乱。

   解决办法: 在IIS中新建一个应用程序池,然后选中你的 基于.net framework2.0的虚拟目录,点“属性”-》在“应用程序池” 中选择刚才新建的的应用程序池,点击“确定”。

    如果你的电脑主要是为了学习,开发,测试web程序,完全可以建一个类似于名为"dotnet2.0"的应用程序池,以后所有新建的2.0的虚拟目录都指向此应用程序池。

但是单位的那台服务器仅仅只运行这一个.net的站点,显然不是以上描述的问题,不过上文也提到一个出现问题的状况,值得收藏.

 

后来找到了这个,如下.

在网站目录中,添加iis_wpg 和asp.net这个两个用户即可。

 

 

Server   Application   Unavailable 出现的原因有多种,具体的解决方法,还得看系统日志的相关提示。

 

有时候可能是组件的丢失,重装应该可以解决。

 

附命令行下卸载和安装asp.net:

 

1.Open a command prompt
2.Stop IIS:“iisreset/stop“
3.Change to the .NET Framework 2.0 root directory:“C:WINDOWSMicrosoft.NETFrameworkv2.0.50727“
4.Stop web services: "net stop w3svc"
5.Uninstall all instances of ASP.NET from IIS: "aspnet_regiis.exe -ua"
6.Reinstall ASP.NET into IIS: "aspnet_regiis.exe -i"
7.Restart web services:“net start w3svc“
8.Restart IIS:“iisreset/start“

 

 

 

 

 

 

 

 

 

 

 

Server   Application   Unavailable

 

 

 

 

The WEB Application You Are Attempting To Access On This WEB Server Is Currently Unavailable. Please Hit   The   “Refresh”   Button   In   Your   WEB   Browser   To   Retry   Your   Request.

 

Administrator   Note:   An   Error   Message   Detailing   The   Cause   Of   This   Specific   Request   Failure   Can   Be   Found   In   The   Application   Event   Log   Of   The   WEB   Server.   Please   Review   This   Log   Entry   To   Discover   What   Caused   This   Error   To   Occur.


 

 

错误提示:服务器应用程序不可用
您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮重试您的请求。

管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到。请检查此日志项以查明导致该错误发生的原因。

 

我遇到的是目录权限问题,所以我在网站目录中,添加iis_wpg 和asp.net这个两个用户,网站就正常访问了,又学了一招.