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

问题描述:

我创建了一个在本地主机上正常工作的MVC应用程序。我使用visual studio将项目发布到本地文件夹并将其上载到FTP位置。但在服务器上它不工作。如何在IIS 7.0中托管MVC应用程序?

我跟着一对夫妇的教程,但没有结果 http://haacked.com/archive/2008/11/03/bin-deploy-aspnetmvc.aspx http://www.hanselman.com/blog/IntegratingASPNETMVC3IntoExistingUpgradedASPNET4WebFormsApplications.aspx

有一些好的教程还是会有人帮助吗? 谢谢

+6

什么不起作用?怎么了?你有什么错误吗? – 2011-05-19 21:07:30

+1

“这不起作用” - 请说明它的失败方式。你使用数据库吗?您可能需要在数据库文件上设置适当的权限。但是还有很多其他的原因可能会导致失败。 – fretje 2011-05-19 21:10:18

+0

它插入了吗? – Gabe 2011-05-19 21:28:34

我们遇到了运行问题。通常(但并非总是),通过Web Platform Installer在服务器上安装ASP.NET MVC似乎可以解决任何问题。因人而异。

+0

是的,我很确定这是问题。 MVC库和路由的东西没有内置到IIS中。 – Tridus 2011-05-19 21:15:53

+3

@Tridus,实际上IIS 7支持mvc路由,它不是IIS 6。 – Gabe 2011-05-19 21:22:41

+0

@加贝 - 哦?嘿,我今天学到了东西。 :) – Tridus 2011-05-19 21:25:32

有一对夫妇的事情,你可以检查:

  1. 检查其下的应用程序池的应用程序运行,并检查应用程序池使用的integrated pipeline代替classic
  2. 检查web.config文件是否包含<system.webServer>元素。如果您使用集成管道,这是HttpModules注册的地方。
  3. 检查<modules>元素的属性runAllManagedModulesForAllRequests设置为"true"。这会导致HttpModules适用于所有请求,允许UrlRouteModule执行此操作。您还必须删除并添加HttpModules。

基本上,web.config<system.webServer>部分应包含这样的事情:

<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

+1 - 这帮助我解决了'modules'元素中缺少runAllManagedModulesForAllRequests =“true”'的问题。 – GiddyUpHorsey 2012-04-30 22:01:48