2

我有一个在 Azure 上运行的 ASP.NET MVC 4 应用程序。我有一些看起来像文件名的自定义路由(即“favicon.ico”)。这些类似文件名的路由在过去 2 年中运行良好,没有出现任何问题。但是,当我从 Azure SDK 1.7 升级到 1.8 时,这些类似文件名的路由停止工作。

它在带有 IIS express 的本地调试环境中运行良好,因此它似乎不是 web.config 文件或 RouteCollection 问题。

我们将“runAllManagedModulesForAllRequests”设置为“true”和“RouteTable.Routes.RouteExistingFiles = true”。此外,这些类似文件的路由在磁盘上不存在。

我在升级前和升级后的机器上检查了失败的请求跟踪日志。它们看起来很相似,只是工作升级前部署有一个从“StaticFile”到“System.Web.Mvc.MvcHandler”的FREB“HANDLER_CHANGED”事件,而错误的升级后部署从来没有(它与“StaticFile”保持一致" handler) 并最终发送一个 404。

因此,如果 UrlRoutingModule 具有扩展名并因此不提供 MvcHandler,则它似乎不再正确解析路由。但是,所有非扩展路由都工作正常(即“一些/测试”),因此即使在 FREB 日志中我在“UrlRoutingModule-4.0”模块。

我错过了一些基本的东西吗?我接下来应该看哪里?

更新:将我们的 ServiceConfiguration.Cloud.cscfg 升级到“osFamily”3(Windows Server 2012),因此 IIS 8 也解决了这个问题。我不确定发生了什么,但很高兴它不再存在。我很想在评论或其他答案中听到进一步的调试见解,这可能对此类情况有所帮助,因为 FREB-ing 并没有我希望的那么有用。

4

1 回答 1

3

刚刚查看了我们的配置和服务器。我们通过更新到 SDK 1.8 切换到 Server 2012。我们使用 Server2012-> osFamily="3" osVersion="*" schemaVersion="2012-10.1.8" 并毫无问题地提供动态 XML(即 sitemap.xml):

  • “runAllManagedModulesForAllRequests”设置为“真”
  • 我们没有指定 RouteTable.Routes.RouteExistingFiles

路由配置如下:

routes.MapRoute(
    "sitemap.xml",
    "sitemap.xml",
    new { controller = "Sitemap", action = "sitemap.xml" }
);

并且 Action 方法装饰有:

[ActionName("sitemap.xml")]
于 2013-03-11T20:52:37.950 回答