如何在 IIS 7.0/7.5/8.0/8.5 執行 ASP 應用程式
日前,公司接到一個顧問案,就是需要在 IIS 7.5 上執行舊版的 ASP 應用程式,會有這個需求是因為該客戶主機打算由 Windows Server 2003 升級為 Windows Server 2008 R2,因此,舊有的 ASP 內部網站,在還沒有升級改寫的情況下,就必須順勢一起使其能正常的運作在 IIS 7.5 中。剛好筆者在14年前就是在寫 ASP,對 ASP 還算也些熟悉,後也常常協助處理一些 ASP 在 Server 2008 執行的一些情況,所以,當然筆者就接下了這個 Case。
現有環境狀況分析:
1. 目標查詢現有ASP網頁程式是否有使用到 Thired-Party Component for COM/ActiveX
2. 是否有使用到 OWA 元件,或是 Office 系列元件
設定步驟:
1. 加入Web Server 網頁伺服器角色
開啟伺服器管理員,可在左邊『角色』的樹狀點選滑鼠右鍵『新增角色』,或如下圖在右邊點選『新增角色』連結。
接著,除了將 Web Server 相關功能勾選起來之外,最重要的就是將 [Application Development] –> [ASP] 勾選起來。
2. 加入應用程式伺服器角色 –> IIS 支援
這個動作可做,可不做,因為在這個 Case 上並不會使用到,只是筆者會建議一併勾選起來,這是當你以後如果會在 IIS 上掛載以 WCF 為主的應用程式就會需要這個對 IIS 的支援。
3. 新增傳統,沒有 Managed 程式碼 的集區
下面這個動作相當重要,一般筆者都會建議,(網站/應用程式)盡量不要共用集區,這才符合微軟當初設計 IIS 時,希望的應用程式的隔離原則,各集區自己管控自己的記憶體管理、CPU 使用率、回收原則、失敗保護 等設定,彼此不該互相干擾。再說,集區內也不允許不同的 .NET Framework,這是 Microsoft 對於集區的基本管理原則。當然,這裡我們需要的是一個不是用來執行 .NET 應用程式的『傳統,沒有 Managed 程式碼』的集區,用以執行傳統舊版的 ASP 應用程式。關於 IIS 應用程式的『整合式』與『傳統』集區的差別可參考筆者最近的 『Internet Information Service (IIS 7.5) 的管理、開發及佈署簡介』。
首先,在 IIS 的應用程式集區管理畫面中,點選『新增集區』,並選擇『傳統』且『沒有 Managed 程式碼』集區
4. 在 ClassASP 的集區裡啟用 32 位元的應用程式
這個動作相當重要,尤其對於古早的 ASP 應用程式而言,幾乎所有功能都由 COM/ActiveX 所提供,而且我們知道 COM/ActiveX 只能夠在 32bit 運作,所以一定得將這個勾選起來,否則,當需要執行一些 32bit 的操作,如:Server.CreateObject("ProgID") 時,一定無法運作。
5. 在 ClassASP 的集區裡改使用 NetworkService 帳號
不使用 IIS 7.5 的動態使用者是因為,考量到原本應用程式在 IIS 6 執行時,所有對於資料夾、COM 物件存取權限一定是設定在 Network Service 上,若改為 ApplicationPoolIdentity 時,勢必得花較多時間來驗證功能執行的正確性,對於短期、暫時使用較建議使用原本 Network Service,這部分交由客戶自行判斷,當然長遠來說,還是使用 ApplicationPoolIdentity 比較安全。
6. 安裝有使用到的相關 Thired-Party Component for COM/ActiveX 元件
這步驟筆者進行的動作為,直接Code-Review,查看所有 ASP 程式中,所有使用 Server.CreateObject("") 的語法,那些是屬於 Thired-Party Component for COM/ActiveX 的元件,比如說典型的 FileUpload 元件,早期在 ASP 時,如果要上載檔案,可能得依靠一些 COM/ActiveX 外部元件,雖然後來也可透過 Flash 來達成。以這個客戶的例子,我查到他們有使用到 SoftArtisans, Inc 的 FileUp 元件。
7. 在元件服務裡設定所需使用的 COM/ActiveX 元件有足夠的啟動權限
接著,我們除了安裝好該SoftArtisans, Inc 的 FileUp 元件之外,不是這樣就可以了,還得到 DCOM Config (也就是後來的權限服務) 設定相關權限,當然,在 x64 系統哩,我們還得使用 32bit 方式啟動元件服務才可以進行對 32 位元的 COM/ActiveX 的設定。
對於如何在 x64 系統中設定 32bit 的 COM 元件可以參考 [元件服務]在x64系統無法看見Microsoft Excel Application的問題 文章。
權限的設定方式可參考筆者以前的 『[元件服務]的[安全性]與[權限]驗證模型』。
8. 建立網站,並測試
最後,進行測試,其實就是測試所有 Server.CreateObject("ProgID") 都可以成功,如下:
結語:
所以 Windows Server 2008 R2 的 IIS 7.5 執行舊版的 ASP 應用程式是沒有任何問題的,同樣的,筆者回家後,也在 Windows Server 2012 R2 的 IIS 8.5 進行相同的設定後,也是可以正常執行,沒有任何問題。
簽名:
學習是一趟奇妙的旅程
這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。
軟體開發之路(FB 社團):https://www.facebook.com/groups/361804473860062/
Gelis 程式設計訓練營(粉絲團):https://www.facebook.com/gelis.dev.learning/
如果文章對您有用,幫我點一下讚,或是點一下『我要推薦』,這會讓我更有動力的為各位讀者撰寫下一篇文章。
非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^