如何在IIS 7.0中托管MVC应用程序?

时间:2011-05-19 21:04:16

标签: c# asp.net-mvc hosting

我创建了一个在本地主机上运行良好的MVC应用程序。我使用visual studio将项目发布到本地文件夹并将其上传到FTP位置。但是在服务器上它无法正常工作。

我遵循了几个教程但没有结果 http://haacked.com/archive/2008/11/03/bin-deploy-aspnetmvc.aspx http://www.hanselman.com/blog/IntegratingASPNETMVC3IntoExistingUpgradedASPNET4WebFormsApplications.aspx

是否有一些很好的教程或有人可以帮忙吗? 感谢

2 个答案:

答案 0 :(得分:7)

您可以查看以下几项内容:

  1. 检查应用程序运行的应用程序池,并检查应用程序池是否使用integrated pipeline而不是classic
  2. 检查web.config文件是否包含<system.webServer>元素。如果您正在使用集成管道,那么这是注册HttpModules的位置。
  3. 检查<modules>元素的属性runAllManagedModulesForAllRequests是否设置为"true"。这会导致HttpModules适用于所有请求,允许UrlRouteModule执行此操作。您还必须删除并添加HttpModules。
  4. 基本上,<system.webServer>中的web.config部分应包含以下内容:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="ScriptModule"/>
            <remove name="UrlRoutingModule"/>
            <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <remove name="ScriptHandlerFactory"/>
            <remove name="ScriptHandlerFactoryAppServices"/>
            <remove name="ScriptResource"/>
            <remove name="MvcHttpHandler"/>
            <remove name="UrlRoutingHandler"/>
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.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=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </handlers>
    </system.webServer>
    

    (请注意,在这种情况下,使用版本1.0的MVC平台。你不应该复制和粘贴这个片段。它纯粹表示它应该是什么样子)

答案 1 :(得分:2)

我们遇到了跑步的问题。通常(但并非总是),通过Web平台安装程序在服务器上安装ASP.NET MVC似乎可以解决问题所在。 YMMV。