2013-03-11 77 views
2

我有一個在Azure上運行的ASP.NET MVC 4應用程序。我有一些自定義的路徑,看起來像文件名(即「favicon.ico」)。這些類似文件名的路由在過去的2年中運行良好,沒有任何問題。但是,當我從Azure SDK 1.7升級到1.8時,這些類似文件名的路由停止工作。帶有文件擴展名的ASP.NET MVC路由不再適用於生產

它在IIS Express的本地調試環境中工作正常,因此它看起來不是web.config文件或RouteCollection問題。

我們將「runAllManagedModulesForAllRequests」設置爲「true」和「RouteTable.Routes.RouteExistingFiles = true」。此外,這些類似文件的路由在磁盤上不存在。

我在升級前和升級後的機器上都檢查了失敗的請求跟蹤日誌。它們似乎是相似的,只是正在工作的升級前部署具有從「StaticFile」到「System.Web.Mvc.MvcHandler」的FREB「HANDLER_CHANGED」事件,而錯誤的升級後部署從來不會這樣做(它保留在「StaticFile 「處理程序),並最終發送一個404.

因此,UrlRoutingModule似乎不再正確解析路由,如果它有一個擴展名,並因此不給予MvcHandler。然而,所有非擴展路由工作正常(即「一些/測試」),所以它似乎現在阻止具有擴展的路由的解決方案,即使在FREB日誌中,我看到「NOTIFY_MODULE_START」 「UrlRoutingModule-4.0」模塊。

我缺少一些基本的東西嗎?我應該在哪裏看下?

更新:將我們的ServiceConfiguration.Cloud.cscfg升級到「osFamily」3(Windows Server 2012),因此IIS 8也使此問題消失。我不確定發生了什麼,但很高興它不再存在。我很樂意聽到關於進一步調試見解的評論或其他答案,這些見解可能對這些情況有所幫助,因爲FREB-ing沒有我希望的那麼有用。

+1

您在Cloud Service中使用什麼操作系統版本? – viperguynaz 2013-03-11 20:31:31

+0

W2K8R2 - > osFamily =「2」osVersion =「*」schemaVersion =「2012-10.1.8」 – 2013-03-11 20:32:31

回答

3

剛剛檢查了我們的配置和服務器。我們切換到Server 2012並更新到SDK 1.8。我們使用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" } 
); 

和行動米ethod裝飾着:

[ActionName("sitemap.xml")] 
+0

我試過將RouteExistingFiles設置爲true和false,而沒有任何行爲改變。我會嘗試將osFamily撞到3以獲得2012. – 2013-03-11 20:54:44

+0

「osFamily」3(Windows Server 2012/IIS 8)似乎讓這個問題消失了!它並沒有真正解釋發生了什麼,但我會接受。 – 2013-03-11 21:33:08

+0

我注意到在新項目中,web.config模板添加了3個system.webServer處理程序:ExtensionlessUrlHandler-ISAPI-4.0_32bit/64位/和ExtensionlessUrlHandler-Integrated-4.0。這些不在我們的舊項目中,但它們包含在Server 2012上的IIS8中。 – viperguynaz 2013-03-11 22:33:59