Session 嘛,佔一點兒服務器資源,可是總歸比 ViewState 和 Cookie 安全點兒,因此仍是要用的。sql
Windows Azure 環境中的 Web 服務器經由負載均衡調度,根本沒法保證下一次處理請求的仍是不是上一次的那臺服務器,因此,直接使用內存的 In-Process 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 之間,木有官方支持,可是可用。無奈咬牙就用這個了。
其實挺簡單的,分三個步驟:
首先,登陸 Windows Azure 控制檯,建立一個空的數據庫。這裏給它起名 ASPState。若是你檢索過英文資料,那麼你發現有人(文章)會讓你運行一段 SQL 腳本建立這個數據庫。從應用的角度看,效果是同樣的,可是,這個腳本建立的數據庫,是不會出如今 Azure 控制檯的數據庫列表裏面的。因此,仍是應該直接在 Azure 控制檯裏面創建這個數據庫。
而後,下載本文末尾提供的文件連接,解壓後獲得 SQL 文件,用 SQL Server Management Studio 打開 Azure 數據庫 ASPState 後,運行此腳本便可完成第二步。這個腳本不是我寫的,是從 這個地址 下載的。可是原始的下載包是包含建立數據庫腳本的,基於上面的緣由,我給去掉了,以避免引發混亂;同時,也起到異地備份的做用。
打開 ASPState 數據庫以及配置 Web.Config 須要鏈接字符串的參數,能夠在 Azure 的數據庫面板上面找到,點擊「查看 ADO .NET …. 鏈接字符串」就是:
用 SQL Server Management Studio 鏈接 Azure 數據庫的過程當中,你可能會收到一個「IP 地址被防火牆攔截」的錯誤消息。不要緊,切換到 Azure 控制檯的數據庫管理界面,打開上面的鏈接字符串對話框,你會看到 Azure 會提示你是否須要容許這個 IP 地址訪問數據庫,只須要點擊提示,將 IP 地址加入容許的訪問列表中保存便可。
最後,在你的 Web.Config 的 System.Web 節中添加下面的內容便可(用 % 引用的內容須要按照你的實際狀況替換):
好了,下面就能夠開始用 Session 了。
附件:下載 配置 ASPState 數據庫的腳本文件 (zip 格式)。
特別說明:SQLServer 的 Session 須要手動調用 DeleteExpiredSessions 存儲過程(若是你運行上面的 SQL 腳本,這個存儲過程是會給你建立好的),由於 SQL Azure 不提供 Agent 服務,因此要手動調用或者用 Azure 提供的「計劃調用」服務等手段。這個調用的時機見仁見智,要結合本身應用的實際來安排,這篇短文中就不展開講太多了。
■