在Windows 2008跑ASP.NET MVC 4

接獲報案,ASP.NET MVC 4(.NET 4.5)部署到Windows 2008/IIS 7無法正常運作,存取png或css等靜態檔案OK,而MVC的controller/action路由沒生效,連上根目錄出現HTTP 403.14,推測為home/index路由失效,又沒有index.html、default.aspx等預設文件導致:

很類似「IIS6 缺少萬用字元應用程式對應」造成的現象(參考),但在我的經驗,只有Windows 2003需要額外手工設定,IIS 7以上應該內建支援MVC路由才對。

經過一番調查,發現問題癥結所在-問題主機是Windows 2008 SP2,不是常見的Windows 2008 R2,而且它的IIS是IIS 7.0不是IIS 7.5!

若對應到Windows客戶端版本,Windows 2008相當於Vista、Windows 2008 SP2相當於Vista SP2,Windows 2008 R2才對應到Windows 7。Windows 7是不少技術的作業系統最低要求,而我平常摸到的Windows 2008都是R2以上版本,就沒意識到Windows 2008非R2版本存在支援度不足的問題。

知道問題癥結就好辦,在web.config加入以下設定即可解決問題:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
  <!-- 略 -->
</system.webServer>

而另一個問題是-為什麼ASP.NET MVC 4 web.config檔少了這個設定?當年不就會害一堆人踩到雷?再深入研究,這源自Visual Studio ASP.NET MVC 4專案範本 .NET 4版與.NET 4.5版的差異(參考:保哥的文章)。若採用.NET 4版ASP.NET MVC 4,web.config有內含<modules runAllManagedModulesForAllRequests="true" />,部署到Windows 2008 SP2 + IIS 7可以過關;但網站演進到新一代的.NET 4.5 ASP.NET MVC 4,基於效能考量已拿掉runAllManagedModulesForAllRequests設定,沒料想到會遇到遲未升級的古老Windows 2008 SP2,就…

如果擔心加入runAllManagedModulesForAllRequests影響效能,另一個解決方案是安裝KB980368,讓IIS 7也能處理MVC這類沒有副檔名的路由URL,會是較完美的做法。

歡迎推文分享:
Published 30 May 2015 09:09 AM 由 Jeffrey
Filed under:
Views: 11,209



意見

# Jimmy Oliver said on 27 July, 2016 04:22 AM

應該是

<modules runAllManagedModulesForAllRequests="true" />

# Jeffrey said on 27 July, 2016 08:55 PM

to Jimmy, 我居然寫反了(遮臉),謝謝指正。

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<May 2015>
SunMonTueWedThuFriSat
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication