因為新客戶有修改網頁的要求,特別用iMAC架了一台Win2008 server,

目的是要把原來的網站複製一份到我自自己的主機來測試。

今天把網站架好後,發現了一問題

HTTP 錯誤 500.22 - Internal Server Error

偵測出 ASP.NET 設定沒有套用到整合式 Managed 管線模式。

懷疑是客戶的網站是架在iis6上的,所以web.config語法不太一樣,

主要差別在於

{ IIS 的應用程序池根據託管管道模式分了兩種類型:集成和經典兩種
集 成.NET 模式下,應用程序不應在<system.web>/<httpModules> 配置節中指定ASP.NET 模塊組件,而應使用<system.webServer>/<modules> 配置節來加載ASP.NET 模塊組件。
經典 .NET 模式 則是我們以前習慣的IIS 6 的方式,沒有上述限制。 }

請參考http://www.cnblogs.com/jhxk/articles/1826398.html
看完就明白了。

也就是說原本寫 httpModules 的方式不適用了,請改寫在 modules 中,httpHandlers ,也是一樣的,應該寫在handlers中。

快把原文貼上,以免以後找不到:

ASP.NET程序从IIS6移植到IIS7时出现500.22错误

 

今天把网站部署到海外空间,管服务器的哥们来找我.说出错了,看了下报错的提示:

 

复制代码
代码
应用程序“TTT”中的服务器错误
Internet 信息服务 
7.0
错误摘要 
HTTP 错误 
500.22 - Internal Server Error
检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
详细错误信息 
模块    ConfigurationValidationModule
通知    BeginRequest
处理程序    StaticFile
错误代码    
0x80070032
请求的 URL    http://localhost:81/
物理路径    E:\TTT
登录方法    尚未确定
登录用户    尚未确定
最可能的原因: 
•    此应用程序在 system.web
/httpModules 节中定义配置。 
可尝试的操作: 
•    将配置迁移到 system.webServer
/modules 节。也可以手动这样做,或通过在命令行中使用 AppCmd 来这样做 - 例如,%SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/"。使用 AppCmd 迁移应用程序将使它能够在集成模式下工作,并能继续在经典模式下和以前版本的 IIS 上工作。 
•    如果您确信可以忽略此错误,则可以通过将 system.webServer
/validation@validateIntegratedModeConfiguration 设置为 false 来禁用它。 
•    也可以将应用程序切换到经典模式应用程序池 
- 例如,%SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool"。只有在无法迁移应用程序时才这样做。 
(将“Default Web Site”和“Classic .NET AppPool”设置为您的应用程序路径及应用程序池名称) 
链接和更多信息集成模式是在 IIS 
7.0 上运行 ASP.NET 应用程序的首选模式
复制代码

==============================================================

查了下500.22错误:http://support.microsoft.com/kb/943891/zh-cn(IIS 7.0 中的 HTTP 状态代码)

如下:

500.22-托管管道模式不能应用一个 ASP.NET httpModules 配置。
500.23-托管管道模式不能应用一个 ASP.NET httpHandlers 配置。

 

 

再看到这篇文章很大的启示:http://www.jb51.net/article/15816.htm,其中一段描述到:

{ IIS 的应用程序池根据托管管道模式分了两种类型:集成和经典两种

集成 .NET 模式下,应用程序不应在 <system.web>/<httpModules> 配置节中指定 ASP.NET 模块组件,而应使用 <system.webServer>/<modules> 配置节来加载 ASP.NET 模块组件。

.NET 模式 则是我们以前习惯的IIS 6 的方式,没有上述限制。}

 

 

检测到在集成的托管管道模式下不适用的 ASP.NET 设置;原来海外服务器的应用程序池使用了默认的“集成模式”.

所以所有的http请求处理都托管给了IIS,我自己的配置当然就不起效了。

 

 

 

解决方法:

 

方法1:在IIS7上配置应用程序池.

将程序池的模式改为“经典”之后,一切正常。

(具体方法:开IIS,右边操作里选基本设置,应用程序池旁边点选择,选为Classic .net AppPool,就将管理模式切换为了经典模式就OK了)

可这是在IIS上操作,但我是租的空间,没有这个权限.

 

方法2:在IIS7添加我们的模块(modules)

参考:http://aabs.wordpress.com/2007/11/16/ihttpmodule-not-running-after-conversion-to-iis-7-and-net-35/

 

方法3:修改web.config

再细了解:

IIS7的Application Pools有两种mode,一种是Integrated,一种是classic。如果使用Integrated模式,那么对自定义的 httpModules和httpHandlers就要修改配置文件了,需要将他们转移到<modules> 和<hanlders>节里去。

IIS7的两种模式和IIS6有什么区别?

IIS7.0 Integrated mode:asp.net 的modules和handlers从<system.webServer>下的<modules> 和<handlers>里读取,以前的<system.web>下的<httpModules> 和<httpHandlers>配置节会被忽略,如果设置禁止验证(disabled validation),是不会产生错误的。

IIS7.0 Classic mode:与以上情况是相反的,<modules>和<handlers>会被忽略。

IIS6.0 :这个大家都不陌生了。

如果做一个可以在IIS6和IIS7的两种mode下都可以运行的配置?validateIntegratedModeConfiguration=“false”是做什么用的?有需要的朋友可以在这里查看详情。

其次,从iis6迁移到iis7上后,有些url rewrite功能可能就不好用了,下面这篇文章讲述了一个hack方法,有效的控制了staticFile handler的职责,实现了像iis6那样的工作方式。

 示例代码:

复制代码
代码
<system.web>
   <!-- Modules for IIS 6.0 and IIS 7.0 Classic mode -->
   <httpModules>
         <add name="MagicAjaxModule" type="MagicAjax.MagicAjaxModule, MagicAjax"/>
   </httpModules>
   <!-- Handlers for IIS 6.0 and IIS 7.0 Classic mode -->   

    <httpHandlers>

      <add path="*.myh" verb="GET" type="MyApp.MyHandler" />

    </httpHandlers


</system.web>
<system.webServer>
  <!-- Modules for IIS 7.0 Integrated mode -->
   <modules>
       <add name="MagicAjaxModule" type="MagicAjax.MagicAjaxModule, MagicAjax"/>
   </modules>
  <!-- Handlers for IIS 7.0 Integrated mode -->   

   <handlers>

      <add name="MyHandler" path="*.myh" verb="GET" type="MyApp.MyHandler" preCondition="integratedMode" />      

    </handlers>

 <!-- Disable detection of IIS 6.0 / Classic mode ASP.NET configuration -->   
   
<validation validateIntegratedModeConfiguration="false" />
 </system.webServer>
文章標籤
創作者介紹

NetPC虛擬主機的部落格

NetPC虛擬主機 發表在 痞客邦 留言(0) 人氣()