zoukankan      html  css  js  c++  java
  • IIS7部署报错 500.22错误 检查到这集成托管模式下不使用的ASP.NET配置

      公司的一个项目,环境为: .Net 4.0 + MVC3,部署在 Windows Server 2003R2 IIS6.0上面运行正常,迁移到新服务器 Windows Server 2008R2,部署在 IIS7.0上, 应用程序池中,托管管道模式中选中了“集成”模式,如下图:

    其他配置如下:

    配置完成后,访问出错报错,

      

    最后检查出了原因:该项目中的 web.config 配置文件不适合 IIS7.0。

    于是将应用程序池的管道模式选择为“经典”模式

    再次访问一切正常。

      问题的根本原因是 IIS7.0 的机制已经发生改变,不再与 IIS6.0 一样,但是兼容 IIS6.0。

    IIS7.0 对配置文件进行了一些修改,Web 开发人员可以使用这些修改内容。例如,<system.webServer> 节就是这样一项修改,

    无论是经典模式还是集成模式都可以识别<system.webServer>节,同时,<system.webServer> 节既可以在 applicationHost.config 文件中设置,也可以在 web.config 文件中设置。

    <system.webServer>节既可以控制静态页面,也可以控制动态页面。即使在经典模式中,<system.webServer>节也具有重要作用,它可以帮助Web开发人员在web.config文件中设置不同的IIS配置。

      在集成模式中,HTTP模块和HTTP处理程序不再定义于<system.web>中,而是定义于<system.webServer>中。如果在集成模式中运行一个包括了HTTP模块或HTTP处理程序的web.config文件,那么将会发生失效。幸运的是,微软公司已经详细规定了一个编号为500.22的错误信息,这个错误信息说明了如何一步步地迁移web.config文件。

    利用AppCmd.exe工具,可以轻而易举地完成文件的迁移工作。为了在Default Web Site上迁移web.config文件,可以执行以下AppCmd.exe命令:

    1. AppCmd.exe migrate config "Default Web Site/" 

    下面是一个web.config文件的例子,这个例子可以在IIS 6.0的经典模式下工作:

    1 <?xml version="1.0" encoding="utf-8" ?> 
    2 <configuration> 
    3     <system.web> 
    4          <httpModules> 
    5               <add type="classname, assemblyname" 
    6                    name="modulename" /> 
    7          </httpModules> 
    8     </system.web> 
    9 </configuration> 

    AppCmd.exe migrate config命令运行结束后,web.config文件将被更新为以下内容:

     1 <?xml version="1.0" encoding="utf-8" ?> 
     2      <configuration> 
     3          <system.web> 
     4                 <httpModules> 
     5                      <add type="classname,assemblyname"
     6                           name="modulename" /> 
     7                 </httpModules> 
     8          </system.web> 
     9          <system.webServer> 
    10                <modules> 
    11                       <add name="modulename" 
    12                            type="classname, assemblyname" 
    13                            preCondition="managedHandler" /> 
    14                </modules> 
    15                <validation validateIntegratedModeConfiguration="false" /> 
    16         </system.webServer> 
    17  </configuration> 

          注意,web.config文件中仍然保留了httpModules节,其目的在于向后兼容,但是,在system.webServer中,modules节则处于优先的地位。

    validateIntegratedMode Configuration属性可以确保IIS不会因为存在遗留的<httpModules>节而产生问题。

    集成管道模式是默认的管道模式,具有一些比较重要的优势。我们需要做的就是迁移定义了HTTP处理程序和HTTP模块的所有web.config文件,从而确保其能够在IIS 7.0下正常工作。

  • 相关阅读:
    httpcontext in asp.net unit test
    initialize or clean up your unittest within .net unit test
    Load a script file in sencha, supports both asynchronous and synchronous approaches
    classes system in sencha touch
    ASP.NET MVC got 405 error on HTTP DELETE request
    how to run demo city bars using sencha architect
    sencha touch mvc
    sencha touch json store
    sencha touch jsonp
    51Nod 1344:走格子(贪心)
  • 原文地址:https://www.cnblogs.com/SavionZhang/p/3899461.html
Copyright © 2011-2022 走看看