大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > ASP.NET技巧 > ASP.NET程序从IIS6移植到IIS7时出现500.22

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

关键词:ASP.NETIIS6IIS7500.22  阅读(6263) 赞(15)

[摘要]本文是对ASP.NET程序从IIS6移植到IIS7时出现500.22错误的讲解,对学习ASP.NET编程技术有所帮助,与大家分享。

最可能的原因:
•此应用程序在system.web/httpModules节中定义配置。
可尝试的操作:
•将配置迁移到system.webServer/modules节。也可以手动这样做,或通过在命令行中使用AppCmd来这样做-例如,%SystemRoot%\system32\inetsrv\appcmdmigrateconfig"DefaultWebSite/"。使用AppCmd迁移应用程序将使它能够在集成模式下工作,并能继续在经典模式下和以前版本的IIS上工作。
•如果您确信可以忽略此错误,则可以通过将system.webServer/validation@validateIntegratedModeConfiguration设置为false来禁用它。
•也可以将应用程序切换到经典模式应用程序池-例如,%SystemRoot%\system32\inetsrv\appcmdsetapp"DefaultWebSite/"/applicationPool:"Classic.NETAppPool"。只有在无法迁移应用程序时才这样做。
(将“DefaultWebSite”和“Classic.NETAppPool”设置为您的应用程序路径及应用程序池名称)
链接和更多信息集成模式是在IIS7.0上运行ASP.NET应用程序的首选模式

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

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

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

解决方法:

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

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

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

方法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.0Classic 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>
<addname="MagicAjaxModule"type="MagicAjax.MagicAjaxModule,MagicAjax"/>
</httpModules>
<!-- Handlers for IIS 6.0 and IIS 7.0 Classic mode -->

<httpHandlers>

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

</httpHandlers>

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

<handlers>

<addname="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>


相关评论