今天把公司的一個小web項目從Asp.Net3.5升級到Asp.Net4.0,結果在UrlRouting上遇到一系列很糾結的問題.(註:Url路由是Asp.Net4.0新增的一項功能,初次接觸的朋友請移步這裡Asp.Net4.0/VS2010新變化(3):webform中也可以直接url路由)
vs2010開發環境中一切運行正常,結果部署到IIS7上以後,首先遇到下面這個問題:
我確定伺服器上的asp.net4.0 已經啟用了(如),對應的網站應用程式程式池也切換到了4.0,但還是這樣!
到msdn論壇上發現也有人遇到類似問題,解決辦法:
先檢測機器上是否安裝了4.0正式版以前的beta或rc版,如
.net framework4 的正式版本號碼為4.0.30319,如果以前安裝過舊版本的4.0架構(如中的v4.0.30128),請先在命令列下輸入 :
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe -i
重新將.net4正式版註冊到IIS中
註:如果伺服器為64位系統,.net會同步安裝64位的 framework,如果是32位的系統則沒有Framework64這個目錄,這個運行完以後,檢查IIS中應用程式集區的版本號碼是否為正式版本號碼
這樣處理完了以後,網站已經能跑起來了,但是又遇到了第二個問題:
如,因為公司的項目應用了一些以前的第三方組件,應用程式集區無法以Integrated整合模式運行(不相容),所以只能選Classic傳統模式,實踐後發現傳統模式下url路由功能無法使用:
又百度一圈後,找到瞭解決辦法:在網站的功能(Feature)視圖下,找到Handler Mappings(Handler映射)並雙擊
添加一個Wildcard Script Map,如
即:將所有尾碼檔案的請求,全部交由Framework64\v4.0.30319\aspnet_isapi.dll來處理
ok,asp.net4.0的路由功能總算在傳統模式下運行正常了(註:如果是整合模式,是沒有該問題的)