很早就想把這篇補齊,但一直沒機會,剛好最近,因為要講課,所以就順便把這篇給補起來,這樣大家如果要查詢,就比較方便…
相信如果有讀過這篇( p.s 現在官方強烈建議,不要再用Azure Storage當Cache了),那可能會知道,不管是Cloud Service或是Web Site,前面都會有用到Load Balance,當然,如果後面只有一個站台,那就沒甚麼差,但如果後面有兩台以上的站台來分流,那Session的議題就變得很重要了…
而Cloud Service很佛心的準備了內建Cache來解決這部分的問題 ( 不然用Azure Cache會貴森森… ),那Web Site呢!?其實除了貴森森的Azure Cache外,還有大家常知的…沒錯!!就是使用SQL Server來存放Session!!
當然,我們不會傻傻的Web放到Azure上,但卻把Session放在陸地上…所以,這篇的目的,就是要介紹,如何使用Azure的SQL Database來存放Session!! ( 嗯,或許大家會擔心效能上的問題,但根據可靠情報指出,目前Azure 上的SQL Database都是用SSD喔!! )
( 這篇原文出處於http://blogs.msdn.com/b/sqlazure/archive/2010/08/04/10046103.aspx )
準備SQL Database
首先,我們當然要先去SQL Database來開一個新的SQL Server,這邊我們是要測試,所以很快的快速創建就好。
接下來,我們直接進入管理的畫面吧;這邊要特別特別注意,我們要從SQL Database( SQL 數據庫 )這邊點下去,然後選擇服務器那邊的超連結。這樣做的原因很簡單,因為我們等下要在Master資料庫進行作業,所以如果點了前面的ASPNETSessionTest資料庫,那等下進入管理的介面,就會無法使用轉移到Master進行管理,所以我們要從Server的地方連進去。
接下來,選擇管理。(大家可以發現,這邊選的就不是什麼ASPNETSessionTest了,而是整台伺服器的名稱 )
預設SQL Database的防火牆是沒開放的,所以這邊要允許通過。
接下來,輸入帳號密碼,資料庫的部分可以空白不選。( 感謝好友Terry提醒~ )
如果是以前,我們在陸地上的時代,我們可能可以使用ASP.NET提供的ASPStateInstall.sql來建立ASPState,但在Azure的SQL Database,則沒那麼容易,因為SQL Database有許多的權限是不可以執行的,所以如果用原本的作法,會碰到釘子,所以我們要利用官方提供給我們的,修改過的版本。
下載位置在這邊。
然後,我們就可以利用下載下來的這兩個sql,來建立必要的東西。
建立
當進入管理介面的時候,我們就可以點選選取資料庫。
我們這邊先使用master。
之後,我們選擇開啟,然後就可以選擇剛剛下載下來後的其中一個檔案ASPStateInstall.sql。
打開後,其實也就只有這樣,但不管怎樣,我們還是執行吧。
執行完成後,我們要切換到剛剛建立好的這個db (ASPState)。選擇資料庫後,就可以找到ASPState,然後點一下後,就會出現小圖可以選,選擇"摘要"後,就可以進去管理。
這邊的步驟,就和之前的一樣了。只是這次選擇了InstallSqlState.sql。
這次的東西就很多了,一樣按下執行。
到這邊,SQL Database就準備妥當了。
ASP.NET的修改( MVC同 )
其實修改非常的簡單…如下圖,只需要到Web.Config裡面的SessionState那邊,改成SQL Server的設定就可以了。
( 如果Web.Config沒看到SessionState,可以安裝ASP.NET Universal Providers,但查詢的時候可能會找到ASP.NET Universal Providers Core,其實Core是ASP.NET Universal Providers的底層核心,當安裝ASP.NET Universal Providers的時候,就會順便把ASP.NET Universal Providers Core裝起來,並且順便修改Web.Config;但如果直接裝Core,則不會協助幫忙修改Web.Config,變成要自己在Web.Config加上後面的那段程式碼。 )
這邊貼上原始碼,方便大家複製貼上。
<sessionState mode="SQLServer" sqlConnectionString="Server=tcp:klm4dkemn2.database.windows.net,1433;Database=ASPState;User ID=sky@klm4dkemn2 ;Password=P@ssw0rd;Trusted_Connection=False;Encrypt=True;" cookieless="false" timeout="20" allowCustomSqlDatabase="true" />
完成後,我們就可以用一些瀏覽器的工具,來查看Cookie裡面紀錄的Session ID。
透過我們建立起來的ASPSTATE這個資料庫,我們也可以從裡面看到,已經有對應的SessionID了,所以可以確定,這樣就已經把SESSION存放到DB裡面去了。
這樣就完成了~
後記
現在透過Web Site,其實整個機制就和一般使用IIS一樣的方便,而且Azure DB的效能也好很多,有興趣的朋友可以試驗看看喔!!