当前位置: 首页 > news >正文

安装Asp.net 2.0服务器出现Server Application Unavailabl --zt

本来服务器上运行的是asp.net框架版本是1.1,站点 IIS运行一切正常,但今天有客户须要 安装.NET 2.0版本;安装了2.0版本后,服务器运行就出现Server Application Unavailable的提示,令人莫名其妙,查阅相关文档,终于有了解决要领 ,原由 是.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.

  查看Event Viewer,看到的错误为:

  Error:Failed to execute request because the App-Domain could not be created. Error: 0x80070005 Access is denied.

  处理办法 :在该web sites的virtual directory下,将Permissions配置 一下,里面应包含:
ASP.NET
IWAM_MachineName
Local_Service
Network_Service
System
  而且权限要配置 为write & read.
  配置 后,一切运行正常.

    另外还有一种可能:

  放到打算购买的虚拟主机上(试用期内,我让他安装了.net 2.0)还是不行,他们应该是高手了,一直以为是自己发布的方式有问题,广求人,狂看帖,最终知道了是我安装了.net framework 1.1 和 2.0后,iis的应用程序池的配置有误,网上看到的处理办法 如下:

  你的.net 2.0 真的能与1.1 安全正确地运行在同一台电脑上吗? 小心Server Application Unavailable 错误,答案当然是肯定的。但不作任何处理的默认情况下,会出问题!

  各位在同一电脑上同时安装并运行.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的错误。

 

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

Pool" 中,所以在默认情况下,不管你有多少个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 framework 2.0的虚拟目录,点“属性”-》在“应用程序池” 中选择刚才新建的的应用程序池,点击“确定”。

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

    补充一下:

  这个在微软官方的解释:

  出现此问题的原由 是进程模型用户帐户(默认情况下为 ASPNET)没有所需系统文件和文件夹的正确用户权限,以便运行 ASP.NET 工作进程。

  要解决此问题,请验证该 ASPNET 帐户拥有如下所示的正确用户权限: • %windir%\Microsoft.NET\Framework\Version\Temporary ASP.NET 文件:完全控制 

• %windir%\Temp:完全控制 
• 应用程序文件夹:读取 
• %installroot% 层次结构(例如,%windir%\Microsoft.Net\Framework\Version):读取 
• %windir%\Assembly:读取

 

    留心 :这是全局程序集缓存。不能直接运用 Windows 资源管理器编辑此文件夹的 ACL。正确做法是,打开命令窗口,然后运行以下命令: 
cacls %windir%\assembly /e /t /p domain\useraccount:R

    另外,在运用 Windows 资源管理器之前,请先运行以下命令以取消对 Shfusion.dll 的注册: 
regsvr32–u shfusion.dll
    在 Windows 资源管理器中配置 了用户权限后,请运行以下命令重新注册 Shfusion.dll: 
regsvr32 shfusion.dll 
• 站点 根目录(例如,%root%\Inetpub\Wwwroot)或默认站点 指向的路径:读取 
• %windir%\System32:读取
(通常情况下,ASPNET 帐户已被授予了用户组成员的用户权限。)

相关文章:

  • 解决FirewallD is not running问题
  • 使用Collectd + InfluxDB + Grafana进行JMX监控
  • 通过自己的项目实际经验,阐述为什么“恶心玩技术”?玩Java技术的教训(一)...
  • centos 生成网卡UUID
  • repo源及yum的常用方法
  • Python Django 初试手记
  • 线性表-顺序存储
  • c# xml读写 操作 实例
  • 设计 MySQL 数据表的时候一般都有一列为自增 ID,这样设计原因是什么,有什么好处?...
  • 买盘+卖盘≠成交量
  • 主题模型--机器学习
  • 初探C#3.0
  • (6)设计一个TimeMap
  • 20190218日记
  • Cisco路由器上配置DHCP全程详解
  • 【RocksDB】TransactionDB源码分析
  • CentOS6 编译安装 redis-3.2.3
  • flutter的key在widget list的作用以及必要性
  • JS基础之数据类型、对象、原型、原型链、继承
  • js中的正则表达式入门
  • Laravel 菜鸟晋级之路
  • PAT A1120
  • PHP面试之三:MySQL数据库
  • vue--为什么data属性必须是一个函数
  • 简析gRPC client 连接管理
  • 我看到的前端
  • #if和#ifdef区别
  • ${factoryList }后面有空格不影响
  • (02)vite环境变量配置
  • (4)Elastix图像配准:3D图像
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (超详细)语音信号处理之特征提取
  • (二)fiber的基本认识
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (算法)求1到1亿间的质数或素数
  • (转)为C# Windows服务添加安装程序
  • .net 7 上传文件踩坑
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET 服务 ServiceController
  • .NET开发者必备的11款免费工具
  • .NET下的多线程编程—1-线程机制概述
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @hook扩展分析
  • @Transactional 详解
  • @软考考生,这份软考高分攻略你须知道
  • [Android Pro] AndroidX重构和映射
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [C/C++] C/C++中数字与字符串之间的转换
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [InnoDB系列] -- SHOW INNODB STATUS 探秘
  • [MicroPython]TPYBoard v102 CAN总线通信
  • [POJ 1915] Knight Moves
  • [ROS2] --- ROS diff ROS2