• 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下正常工作。

  • 相关阅读:
    Vue.Js(html5) + Java实现文件分片上传
    进程、线程基础知识全家桶,30 张图一套带走
    20 张图揭开「内存管理」的迷雾,瞬间豁然开朗
    面试官:换人!他连 TCP 这几个参数都不懂
    TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?
    实战!我用 Wireshark 让你“看得见“ TCP
    IP 基础知识全家桶,45 张图一套带走
    写了Bug,误执行 rm -fr /*,我删删删删库了,要跑路吗?
    你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了
    硬不硬你说了算!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
  • 原文地址:https://www.cnblogs.com/SavionZhang/p/3899461.html
Copyright © 2020-2023  润新知