2011-09-26 37 views
2

我們有一個在IIS6上託管的.NET 3.5應用程序(混合了MVC和WebForms)。爲了使它在IIS6上工作,我們必須將自定義映射添加到IIS,使* .MVC映射到aspnet_isapi.dll。在IIS7上將* .MVC映射到aspnet_isapi.dll

因此,我們的網址最終會看起來像這樣: <host>\someController.mvc\action

但現在是在IIS7設置此Web應用程序時,與經典模式池,試圖做同樣的事情,所以我們不必須改變有關應用程序的任何事情。

但是在IIS7中添加* .MVC Handler映射後,它似乎仍然沒有選中它。每次我們導航到我們的MVC頁面時,我們都會收到404錯誤。但是,我們的.aspx頁面加載正常。

在仔細檢查了失敗請求跟蹤不斷抱怨以下 ModuleName="IIS Web Core", Notification="MAP_REQUEST_HANDLER", HttpStatus="404", HttpReason="Not Found", HttpSubStatus="0", ErrorCode="The system cannot find the file specified. (0x80070002)", ConfigExceptionInfo=""

我手忙腳亂。我們可以在另一個IIS7機器上設置它,但這個試圖設置它的人拒絕工作。我真的不知道我錯過了什麼。它就像映射規則根本不會觸發。因爲如果我們只是在URL中爲文件名輸入隨機的東西就會發生同樣的錯誤。

回答

3

我剛剛處理了這一點,真正做到了對我來說是擺脫整個MvcHttpHandler的(從

<system.webServer>/<handlers> 

配置標記刪除)。

MSDN指出,當所有請求未啓用UrlRoutingModule這個處理器是唯一有用的(這在IIS7 +,我們可以),因此它爲什麼有用的IIS6(也是爲什麼我們需要* .mvc擴展正確路由) 。

所以只是在你的處理程序刪除MvcHttpHandler參考,並確保您:

  • 有與集成模式下(不經典)的應用程序池運行的應用程序
  • 你模塊屬性runAllManagedModulesForAllRequests設置爲「真」

    <modules runAllManagedModulesForAllRequests="true"> 
    

如果你仍然得到404的那麼它的電子商務讓你的MVC做到這一點(這真是讓我側目:S)另一個原因。