2006-11-26 22:21:38
大中小
問題起因:新系統將要全面用.net平台來開發,前面兩年的工作都是用ASP來開發,如果費除的話,工作量很大,但後續的系統在ASP上實現困難,在以後的安全和升級打包上asp.net比ASP要強大多了,所以決定後面的開發轉.net平台,首先就遇到了一個Session值的問題.因為asp和asp.net完全不同,雖都可以有IIS下執行,asp是面向過程開發,其實都算不上開發,只能算是vbscript,和javascript指令碼語言,session值都是儲存在伺服器記憶體中,所以線上使用者越多,session定義的越多,系統記憶體就占的越大;asp.net完全是採用數所庫儲存的.兩者session值儲存方式完全不同,直接傳值肯定行不通.
解決辦法:在網上找一些資料,問一些.net的老鳥,答案都是不能實現,都說要推翻重新用.net做.周六晚上,想的頭痛了,還是沒有找到方法,我是問題沒有解決,睡覺都會想的.在今天下午終於我在微軟msdn網站上找到瞭解決辦法http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/default.mspx?mfr=true, 要說明的是這裡也有些錯誤的地方,如果的照搬肯定也會現出錯.
上面是原理圖:
程式碼下載
設定步驟 " 建立一個名為 SessionDemoDb 的新資料庫。(庫名可以自己根據項目不動)
" 建立 SessState 表 (osql.exe -E -d SessionDemoDb -i Session.sql)。
" 建立名為 Demo 的新虛擬目錄。
" 關閉 ASP 配置選項卡中的 ASP Session。
" 將 web.config、testPage.aspx、Global.asa、testPage.asp 和 GlobalInclude.asp 複製到虛擬目錄中。
" 更新 Global.asa 和 web.config 中的 DSN 字串設定。會話逾時設定是可選的。預設值為 20 分鐘。?
" 將 SessionUtility.dll 安裝到 Global Assembly Cache (gacutil /i SessionUtility.dll)。
" 利用 regasm.exe 將 SessionUtility.dll 公開為 COM 物件 (regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb)。
" 將 SessionManager.dll 複製到一個本地目錄中,並利用 regsvr32.exe 註冊該檔案 (regsvr32 SessionManager.dll)。
" 為 IUSR_<machine_name> 帳號賦予對 SessionMgr.dll 的讀和執行許可權。
小結
ASP.NET 代表了一種全新的編程典範和結構,並且比傳統的 ASP 具有更多優勢。雖然從 ASP 遷移到 ASP.NET 並不是一個簡單的過程,但 ASP.NET 更好的編程模型和更高的效能使得這種轉換過程物有所值。
#c#專欄