各位在同一電腦上同時安裝並運行.net 1.1 和 .net 2.0 兩個版本的朋友要小心啊!
您的項目是不是時不時會出現 Server Application Unavailable 錯誤呢?或者一直連續都出這個錯誤!
今天幫一個老師升級一個web的心理測評系統.那個系統原來是ASP.NET 1.1的,新版本是ASP.NET 2.0的..(PS:那台伺服器上面還裝其他的ASP.NET程式,用的是ASP.NET1.1的.)
1、在伺服器上建立一個目錄,然後將發布後的所有Web程式的檔案複製到這個建立的目錄。
2、在伺服器的IIS上建立一個虛擬目錄,然後 將其配置成可以執行指令碼的應用程式,(過程與建立.net Framework 1.1版本的程式相同。) 然後,將此虛擬目錄的.net Framework 配置成2.0。
大功告成後,開始訪問剛配置的程式,卻得到如下錯誤:
Server Application Unavailable
The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request.
Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.
經過仔細閱讀了IIS協助文檔,才發現,原來這個錯誤是由 IIS6 應用程式隔離機製造成的。IIS預設的應用程式隔離機制被稱為:“背景工作處理序隔離模式”,在此模式中,應用程式被分為多個組,每個組就是一個“應用程式集區” ,每個應用程式集區之間是相互隔離的。 隔離的好處當然就是安全啦,穩定啦,等等。IIS中的每個應用程式集區由一個“背景工作處理序”分別進行管理,也就是"W3wp.exe" 。如果有多個應用程式集區中的程式運行,我們就能看到多個w3wp.exe。 我們平時建立的虛擬目錄都預設被指向IIS6的“DefaultAppPool" 中, 所以在預設情況下,不管你有多少個asp.net程式在運行,在“Windows工作管理員”中你只能看到一個w3wp.exe進程。
出現上述錯誤的原因是: .net Framework 2.0的程式與.net Framework1.1(或1.0)的程式被放入同一個應用程式集區(預設情況下放入DefaultAppPool池),也就是由同一個背景工作處理序: w3wp.exe 進行管理,而單個背景工作處理序是無法同時管理不同的程式(或者不同版本的程式)的。如果先訪問.net framework 1.1的頁面,則背景工作處理序先載入並管理了 1.1版本的程式集,此時訪問.net framework 2.0的web程式頁面,Server Application Unavailable 錯誤就出來了。 反之,如果在預設應用程式集區的w3wp.exe尚未啟動前先訪問了 2.0的web程式(此時應用程式集已經載入了.net framework2.0的Web程式集),再訪問1.1或1.0的Web程式頁面時,同樣會出現“伺服器應用程式不可用” 這樣的中文提示。(您可以結束掉以前的w3wp.exe進行測試。)
解決辦法: 在IIS中建立一個應用程式集區,叫"ASP.NET2.0"吧,然後選中那個系統的虛擬目錄,點“屬性”-》在“應用程式集區” 中選擇剛才建立的的應用程式集區,點擊“確定”。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/zfh198601/archive/2009/06/10/4256556.aspx