我按照此处列出的步骤操作:该页面底部的http://msdn.microsoft.com/en-us/library/dd483478.aspx是将web.config从.net 3.5手动迁移到4.0的步骤
目前,网站加载和路由正常,静态数据除外 - 图像,css ..
迁移指南中的所有内容都可以正常工作,除了:“7.删除system.webserver部分开始和结束标记之间的所有内容,但保留标记本身。”
当我这样做时,我收到一个错误:
"HTTP 500.22 Module ConfigurationValidationModule
Notification BeginRequest
Handler Not yet determined
Error Code 0x80070032 "
我的system.webserver看起来像这样(我手动将3.5.0.0引用更改为4.0.0.0):
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule"/>
<remove name="ScriptModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="UrlRoutingModule" preCondition="" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<remove name="BlockViewHandler"/>
<remove name="MvcHttpHandler"/>
<remove name="UrlRoutingHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
<add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="UrlRoutingHandler" verb="*" path="UrlRouting.axd" preCondition="integratedMode" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/></handlers>
</system.webServer>
有人知道为什么我不能删除该部分,正如指南所说的那样?以及为什么静态文件不会加载?我想这是一个相关的问题。 提前谢谢!
编辑:如果我删除BlockViewHandler行,一切都很好。 我仍然不确定为什么我不能像迁移指南那样删除整个部分。
答案 0 :(得分:0)
此处有更多错误:AppCmd Migrate Config and HTTP Error 500.22。
您已向我们展示了您的&lt; system.webServer&gt; - 但是你在&lt; system.web&gt; /&lt; httpModules&gt;下有什么吗?或&lt; system.web&gt; /&lt; httpHandlers&gt;?这可能是原因。在IIS7集成模式中,这些子部分需要位于&lt; system.webServer&gt;下。而不是&lt; system.web&gt;。
当您删除&lt; system.webServer&gt;内的所有内容时,您将删除此行:
<validation validateIntegratedModeConfiguration="false"/>
告诉IIS不要验证配置是否在集成模式下工作。 (如果您的应用程序池实际上在经典模式下运行,则跳过验证即可。)
当删除此元素告诉它跳过验证时,IIS会尝试验证配置对集成管道模式是否有效。如果您在旧的&lt; system.web&gt;下使用HTTP模块或HTTP处理程序,则会失败元件。需要将它们移动到&lt; system.webServer&gt;。您可以手动执行此操作,也可以使用“appcmd migrate config”命令,该命令将为您更新web.config。
要在IIS站点的根目录下迁移web.config,请像这样运行appcmd migrate config(请注意尾部斜杠):
appcmd migrate config "Your Site Name/"
要迁移站点根目录下的应用程序的web.config,请执行以下操作:
appcmd migrate config "Your Site Name/Your App Name"
更改web.config后,您应该将其对源控制的web.config副本进行更改。否则,如果从源代码管理中重新部署web.config文件,则更改将会被破坏。