ASP.NET 在 Windows Azure 環境中使用基於 SQLServer 的 Session

Session 嘛,佔一點兒服務器資源,可是總歸比 ViewState 和 Cookie 安全點兒,因此仍是要用的。sql

Windows Azure 環境中的 Web 服務器經由負載均衡調度,根本沒法保證下一次處理請求的仍是不是上一次的那臺服務器,因此,直接使用內存的 In-Process Session 就不能用了。數據庫

Session

那麼怎麼辦呢?緩存

 

備選方案

ASP.NET State Service 安全

專門用一臺服務器來管理 Session。這個方案 On-Premis 方案裏面能夠用,Azure 的環境中尚未任何可用的跡象,跳過。服務器

 

Table Storage負載均衡

直接用 Azure 裏面的存儲服務來給你保存 Session。存儲服務好便宜,最高級的「讀取訪問地域冗餘存儲 (RA-GRS)」對錶和隊列的報價是 $0.12  1T/月。可是,問題就是慢。因此,跳過。blog

 

Azure Caching隊列

內存的緩存服務,速度最快、也最貴。最大的問題是,中國的 Azure 目前還不支持(但云服務提供 In Role Caching)。無奈跳過。ip

 

SQL Azure內存

速度介於 Table Storage 和 Azure Caching 之間,木有官方支持,可是可用。無奈咬牙就用這個了。

 

操做步驟

其實挺簡單的,分三個步驟:

  1. 創建一個 SQL Azure 數據庫
  2. 在這個新的空數據庫上面跑一個腳本,把所需的表和存儲過程都創建起來
  3. 配置 ASP.NET Web 應用的 Web.Config 文件

 

首先,登陸 Windows Azure 控制檯,建立一個空的數據庫。這裏給它起名 ASPState。若是你檢索過英文資料,那麼你發現有人(文章)會讓你運行一段 SQL 腳本建立這個數據庫。從應用的角度看,效果是同樣的,可是,這個腳本建立的數據庫,是不會出如今 Azure 控制檯的數據庫列表裏面的。因此,仍是應該直接在 Azure 控制檯裏面創建這個數據庫。

Database

 

而後,下載本文末尾提供的文件連接,解壓後獲得 SQL 文件,用 SQL Server Management Studio 打開 Azure 數據庫 ASPState 後,運行此腳本便可完成第二步。這個腳本不是我寫的,是從 這個地址 下載的。可是原始的下載包是包含建立數據庫腳本的,基於上面的緣由,我給去掉了,以避免引發混亂;同時,也起到異地備份的做用。

打開 ASPState 數據庫以及配置 Web.Config 須要鏈接字符串的參數,能夠在 Azure 的數據庫面板上面找到,點擊「查看 ADO .NET …. 鏈接字符串」就是:

Panel

用 SQL Server Management Studio 鏈接 Azure 數據庫的過程當中,你可能會收到一個「IP 地址被防火牆攔截」的錯誤消息。不要緊,切換到 Azure 控制檯的數據庫管理界面,打開上面的鏈接字符串對話框,你會看到 Azure 會提示你是否須要容許這個 IP 地址訪問數據庫,只須要點擊提示,將 IP 地址加入容許的訪問列表中保存便可。

 

最後,在你的 Web.Config 的 System.Web 節中添加下面的內容便可(用 % 引用的內容須要按照你的實際狀況替換):

Web.Config

 

好了,下面就能夠開始用 Session 了。

 

附件:下載 配置 ASPState 數據庫的腳本文件 (zip 格式)。

特別說明:SQLServer 的 Session 須要手動調用 DeleteExpiredSessions 存儲過程(若是你運行上面的 SQL 腳本,這個存儲過程是會給你建立好的),由於 SQL Azure 不提供 Agent 服務,因此要手動調用或者用 Azure 提供的「計劃調用」服務等手段。這個調用的時機見仁見智,要結合本身應用的實際來安排,這篇短文中就不展開講太多了。

 

相關文章
相關標籤/搜索