Session 嘛,占一點兒服務(wù)器資源,但是總歸比 ViewState 和 Cookie 安全點兒,所以還是要用的。
Windows Azure 環(huán)境中的 Web 服務(wù)器經(jīng)由負(fù)載均衡調(diào)度,根本無法保證下一次處理請求的還是不是上一次的那臺服務(wù)器,所以,直接使用內(nèi)存的 In-PRocess Session 就不能用了。
那么怎么辦呢?
ASP.NET State Service
專門用一臺服務(wù)器來管理 Session。這個方案 On-Premis 方案里面可以用,Azure 的環(huán)境中還沒有任何可用的跡象,跳過。
Table Storage
直接用 Azure 里面的存儲服務(wù)來給你保存 Session。存儲服務(wù)好便宜,最高級的“讀取訪問地域冗余存儲 (RA-GRS)”對表和隊列的報價是 $0.12 1T/月。但是,問題就是慢。所以,跳過。
Azure Caching
內(nèi)存的緩存服務(wù),速度最快、也最貴。最大的問題是,中國的 Azure 目前還不支持(但云服務(wù)提供 In Role Caching)。無奈跳過。
SQL Azure
速度介于 Table Storage 和 Azure Caching 之間,木有官方支持,但是可用。無奈咬牙就用這個了。
其實挺簡單的,分三個步驟:
首先,登錄 Windows Azure 控制臺,創(chuàng)建一個空的數(shù)據(jù)庫。這里給它起名 ASPState。如果你檢索過英文資料,那么你發(fā)現(xiàn)有人(文章)會讓你運行一段 SQL 腳本創(chuàng)建這個數(shù)據(jù)庫。從應(yīng)用的角度看,效果是一樣的,但是,這個腳本創(chuàng)建的數(shù)據(jù)庫,是不會出現(xiàn)在 Azure 控制臺的數(shù)據(jù)庫列表里面的。所以,還是應(yīng)該直接在 Azure 控制臺里面建立這個數(shù)據(jù)庫。
然后,下載本文末尾提供的文件鏈接,解壓后得到 SQL 文件,用 SQL Server Management Studio 打開 Azure 數(shù)據(jù)庫 ASPState 后,運行此腳本即可完成第二步。這個腳本不是我寫的,是從 這個地址 下載的。但是原始的下載包是包含創(chuàng)建數(shù)據(jù)庫腳本的,基于上面的原因,我給去掉了,以免引起混亂;同時,也起到異地備份的作用。
打開 ASPState 數(shù)據(jù)庫以及配置 Web.Config 需要連接字符串的參數(shù),可以在 Azure 的數(shù)據(jù)庫面板上面找到,點擊“查看 ADO .NET …. 連接字符串”就是:
用 SQL Server Management Studio 連接 Azure 數(shù)據(jù)庫的過程中,你可能會收到一個“ip 地址被防火墻攔截”的錯誤消息。沒關(guān)系,切換到 Azure 控制臺的數(shù)據(jù)庫管理界面,打開上面的連接字符串對話框,你會看到 Azure 會提示你是否需要允許這個 IP 地址訪問數(shù)據(jù)庫,只需要點擊提示,將 IP 地址加入允許的訪問列表中保存即可。
最后,在你的 Web.Config 的 System.Web 節(jié)中添加下面的內(nèi)容即可(用 % 引用的內(nèi)容需要按照你的實際情況替換):
好了,下面就可以開始用 Session 了。
附件:下載 配置 ASPState 數(shù)據(jù)庫的腳本文件 (zip 格式)。
特別說明:SQLServer 的 Session 需要手動調(diào)用 DeleteExpiredSessions 存儲過程(如果你運行上面的 SQL 腳本,這個存儲過程是會給你創(chuàng)建好的),因為 SQL Azure 不提供 Agent 服務(wù),所以要手動調(diào)用或者用 Azure 提供的“計劃調(diào)用”服務(wù)等手段。這個調(diào)用的時機見仁見智,要結(jié)合自己應(yīng)用的實際來安排,這篇短文中就不展開講太多了。
■
新聞熱點
疑難解答