部署ASP.NET MVC 4应用程序

时间:2015-06-15 22:08:48

标签: asp.net-mvc asp.net-mvc-4 web-deployment

在Visual Studio中,我的项目构建并运行没有问题。部署到Windows Server 2012 R2时,我遇到以下错误:

  

未为请求的网址配置默认文档   目录浏览未在服务器上启用。

我已经安装了所有4.5和其他Roles and Profiles,已经将文件夹的权限授予所有人并阅读了每篇文章,并尝试实施每个建议都无济于事。

我没有选择,花了几周的时间,并且无法理解如何只是部署一个网站这么复杂。有人可以提供建议吗?感谢

修改 - 这是针对Windows Server 2012的,我尝试过建议的替代方案,例如将runAllManagedModulesForAllRequests添加到我的web.config。

编辑部署时,我在发布模式下构建解决方案,并将bin,views,content和scripts文件夹复制到Windows Server。在IIS中,我然后将该文件夹设置为应用程序,确保分配了4.0 App Pool并仍然收到错误。

最终修改 发布允许我看到需要复制的结构。还有3个dll需要从Visual Studio本地复制:

  • System.Web.Http.dll
  • System.Web.Http.WebHost.dll
  • System.Net.Http.Formatting.dll

以及Web.Config dependentAssembly更新时考虑到一些MVC4 dll,例如Unity.Mvc4指向MVC3二进制文件。

3 个答案:

答案 0 :(得分:2)

此错误消息提供了有关问题的线索。 MVC站点不像WebForms那样依赖文档或网页,这是IIS的默认模式。它们依赖于一个特殊的处理程序,它处理用于将请求传递给应用程序的RESTful URL。

在您的web.config文件中,检查system.webServer部分中是否存在以下配置:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>   
</system.webServer>

然后在Web服务器上,打开IIS管理器,在LHS的Connections面板中导航到代表您的应用程序的节点,然后双击Features View选项卡中的Handler Mappings图标。检查是否已启用ExtensionlessUrlHandler-Integrated-4.0处理程序(请参阅下文)。

ExtensionlessUrlHandler

如果这不起作用,请仔细检查您是否在服务器上启用了ASP.NET 4.5角色。有关说明,请参阅http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-using-aspnet-35-and-aspnet-45#TOC301258515

还要确保应用程序在为.NET 4.0配置的AppPool下运行。

答案 1 :(得分:1)

我建议您通过右键单击解决方案资源管理器中项目上的,在Visual Studio中使用发布工具,以在网络上部署生成的文件。然后尝试以下方法:

  1. 使用Web PI重新安装.Net框架和MVC。
  2. 在根文件夹中放置一个虚拟 default.aspx 文件(这不会是 在MVC工作时使用,但可以摆脱这个问题)。
  3. 尝试在Visual Studio 64中运行aspnet_regiis -i命令 bit命令提示符(具有管理员权限),然后部署它。
  4. 查看Default Document configuration in IIS
  5. 我希望得到解决。

答案 2 :(得分:0)

似乎IIS没有将您的应用程序视为Web应用程序。它必须是MVC版本不匹配。

由于它被标记为MVC4,我们在MVC4中有3个内部版本。检查服务器安装的MVC版本。如果没有安装或者您不想在服务器中安装MVC,请为项目中引用的所有程序集设置CopyLocal = true并重新发布应用程序和在服务器中部署。