昨天同事將一個 ASP.NET 4.0 的網站安裝到客戶的 IIS6 主機上 (測試環境),結果過程非常不順利,他們曾經一度覺得客戶的主機不知道經過幾隻手蹂躪過了(因為有好多人在共用 Administrator 帳號)進而產生排斥安裝在客戶主機以及 “為什麼我們要用 ASP.NET 4” 的感覺,不過在一群人的努力之下最後還是克服了困難,我特別因此寫下筆記,相信這些問題有其他人也可能會遇到。
要執行 ASP.NET 4.0 網站必須先安裝 Microsoft .NET Framework 4
安裝前必須先確定你的作業系統版本是在支援的範圍內:
- Windows XP SP3
- Windows Server 2003 SP2
- Windows Vista SP1 (含) 以後版本
- Windows Server 2008 (伺服器核心角色不支援)
- Windows 7
- Windows Server 2008 R2 (伺服器核心角色不支援)
常見問題1:設定網站站台的 ASP.NET 頁籤時找不到 ASP.NET 4.0 的選項
注意:如果你只有安裝 .NET Framework Client Profile是不支援 ASP.NET 的,必須下載 Microsoft .NET Framework 4 (獨立安裝程式) 來安裝才會完整。
正常來說,只要 Windows Server 2003 已經先安裝好 IIS 再安裝 Microsoft .NET Framework 4 就可以在 IIS 6.0 網站站台的 ASP.NET 頁籤找到 ASP.NET 4.0 的選項:
常見問題2:安裝好 .NET 4 後還是找不到設定網站站台的 ASP.NET 頁籤的 ASP.NET 4.0 的選項
這問題通常出在先安裝 Microsoft .NET Framework 4 才安裝 IIS6,這時必須輸入以下指令將 ASP.NET 4.0 註冊進 IIS6 即可:
C:WINDOWSMicrosoft.NETFrameworkv4.0.30319aspnet_regiis.exe -ir -enable
常見問題3:安裝好 .NET 4 也設定好網站站台的 ASP.NET 4.0 的選項依然無法執行網站
這裡的「無法執行網站」其實所有執行的頁面都會出現 找不到這個頁面 (HTTP 錯誤 404 – 找不到檔案或目錄) 的回應,不管你怎麼設定目錄安全性或任何執行權限都無法執行任何 ASP.NET 程式,而且可能只有靜態頁面可以讀取而已,像是如下圖示這麼一般性的錯誤訊息真的很容易讓 IT 人員不知如何是好:
如果你因為安裝 ASP.NET MVC 而有設定「萬用字元應用程式對應」的話,則會發現網站所有頁面包括靜態檔案讀去都會回應 找不到這個頁面 的錯誤!
此問題發生的原因是 IIS6 阻擋了 c:windowsmicrosoft.netframeworkv4.0.30319aspnet_isapi.dll 程式的執行,由於所有會被導向到此 ISAPI Handler 的要求全部都會失敗,所以才會導致你所有 HTTP 要求都會得到 HTTP 404 Not Found 的結果。
解決方式很簡單,只要到 [網頁服務延伸] 的地方將 ASP.NET v4.0.30319 設定 [允許] 即可,如下圖示:
常見問題4:ASP.NET 4.0 的網站站台已經設定好也可以正常執行了,但執行一段時間會自己掛掉!
如果你在同一個應用程式集區設定了兩個不同版本的 ASP.NET 就會造成這個問題,例如你原本有個 ASP.NET 2.0 的站台,並且設定的應用程式集區為 DefaultAppPool,然而你之後又新增了一個 ASP.NET 4.0 的站台,而預設的應用程式集區也是在 DefaultAppPool 的話就會發生衝突了,這時就會看是哪個站台先被執行起來,先跑起來的那個站台才會搶到所有權,後面執行的那個就會發生 Server Application Unavailable 或 伺服器應用程式無法使用 的錯誤:
解決的方法有二:
- 將共用應用程式集區的 網站站台 或 網站應用程式(虛擬目錄) 都設定到 ASP.NET v4.0.30319
- 區分兩個不同的應用程式集區
常見問題5:在站点属性里找不到asp.net选项
到服务器上运行:cscript %SYSTEMDRIVE%inetpubadminscriptsadsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
如果还不行再运行这个:cscript %SYSTEMDRIVE%inetpubadminscriptsadsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0
还不行再运行:%SYSTEMROOT%Microsoft.NETFrameworkv1.1.4322aspnet_regiis.exe -i
最后还不行就没办法咯。。。。