应用程序池回收后MVC路由丢失(更新标题3/3/14)

时间:2014-02-27 20:16:25

标签: asp.net-mvc asp.net-mvc-4 iis windows-server-2008

我正在尝试将ASP.NET MVC 4 Web应用程序部署到生产服务器(安装了SP1的Windows Server 2008 R2 [x64],运行IIS 7.5),该服务器已经有其他几个有效的ASP.NET应用程序。我所能得到的只是403索引,除了静态内容之外的其他所有内容都是404。该应用程序在我的本地计算机的IIS 7.5实例上运行没有问题(我在Windows 7上运行,最新的,64位。)

我尝试过:

  • <modules runAllManagedModulesForAllRequests="true"/>
  • 尝试为无扩展名网址(在http://support.microsoft.com/kb/980368找到)应用Microsoft修补程序(没有帮助,Service Pack 1已包含它)
  • 确保将HTTP错误,HTTP重定向和静态内容添加到角色服务(https://stackoverflow.com/a/4264564/1030925
  • 运行命令aspnet_regiis -iru
  • 确保应用程序的位数正确(任何CPU)
  • 切换启用32位应用程序
  • 在经典模式和集成模式之间切换
  • 确保选中“允许未列出的文件扩展名”(https://stackoverflow.com/a/5155322/1030925
  • 确保ExtensionlessUrlHandler映射完好无损
  • 确保我的启动代码在Application_Start中而不是其他内容
  • 确保ApplicationPoolIdentity的文件夹权限(它可以提供静态内容)
  • 在web.config(https://stackoverflow.com/a/16577694/1030925
  • 中重新添加UrlRoutingModule-4.0模块

UPDATE:

今天早上我停止了网站,停止了应用程序池,重新部署而没有触及任何东西,而且......它有效!但是......如果我在配置中触摸了一个小东西,无论是在远程桌面上使用FileZilla还是IIS控制台,该网站都会爆炸并再次开始这样做。只有通过停止站点并将所有文件替换在一起,我才能恢复它 - 尝试停止并更换web.config,但这不起作用。更改可以简单到禁用和重新启用我的“重定向到https”重写规则。

2014年3月3日更新:

似乎问题是我的路由在应用程序池被回收时停止工作,无论是通过文件更改还是显式重新启动。我使用Application_Start和RegisterRoutes以与项目模板相同的方式注册两条路线。如果它在标准项目模板中,我不明白为什么这不起作用......

2 个答案:

答案 0 :(得分:0)

问题在于我的发布设置。我在Visual Studio 2012中使用以下预编译选项:

enter image description here

通过选择“不合并”或​​“将所有输出合并到单个组件”,问题得到缓解。

<强>更新

即使使用其他设置,问题也会恢复,但它并没有立即发生。我不得不完全禁用预编译。

答案 1 :(得分:0)

我想在这里给我2美分。我在Windows Server 2012上有这种确切的行为。

我的问题与配置无关,但事实global.asaxApplication_Start中有异常,我的代码注册路由表后再也没有发生过。因此,如果您有此行为,请确保捕获异常并处理它们,以便执行所有代码。