2014-06-15 81 views
0

我打算將.Net應用程序(基於SQL Server)遷移到Azure。然而,在我朝這個方向作出重大努力之前,我想確保在這條道路上不會出現瓶頸。在代碼中,在幾個地方,我們只是在Session中放置對象(而不是文字鍵值)。像這樣:Azure緩存 - 存儲在會話中的對象

會議(「客戶端列表」)= _MyClientList

(其中_MyClientList對象封裝的表從數據庫或在代碼中定義的視圖模型對象返回)。

問題是,如果我使用Azure緩存(在Azure雲服務中),緩存api是否能夠跨各種實例自動持續(序列化/反序列化)這些對象?

現在的代碼工作正常(當然,只有一個服務器實例正在運行,並且很可能服務器將這些進程內對象的引用保持爲活動狀態,因此這些對象不會保留在磁盤上) 。

一個相關的問題,在負載平衡器後面啓動兩個實例後,有一種方法可以測試一切是否正常工作。我的懷疑是,如果沒有加載,所有的請求都會碰到相同的實例,因此緩存可能會被正確測試。真正?對不起,在這個領域有點新手。

在此先感謝。

+0

你打算上部署應用程序作爲'天青Website'或'碧霞Service'? –

+0

Azure雲服務。 –

回答

0

的問題是,如果我使用Azure的緩存,將緩存API能夠 自動持續(序列化/反序列化)跨 各種情況下,這些對象呢?

是的,Azure緩存會爲你做這件事(我在我的應用程序中使用In-Role緩存)。但是,對此,您將不得不使用Azure Caching Session State Provider。這是你需要把你的web.config文件:

<sessionState mode="Custom" customProvider="AFCacheSessionStateProvider"> 
    <providers> 
    <add name="AFCacheSessionStateProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheSessionState"/> 
    </providers> 
</sessionState> 

(實際上,當你啓用你的角色緩存上面的代碼行自動插入你只需要取消註釋這些行。)。

UPDATE

一個相關的問題,推出兩個實例背後負載平衡器 後,有沒有辦法測試,如果一切正常。我的 懷疑是沒有加載,所有的請求將會碰到相同的 實例,因此緩存可能會被正確測試。真正?對不起,在這個領域的 位新手。

你可以做的一件事就是把電腦的名字放在代碼的某處(可能是頁腳)。如果你使用MVC,你可以這樣做:

@System.Environment.MachineName 

這樣,如果請求打算在所有服務器上或服務器切換時只需一臺服務器和會話持久化,你可以測試一下。

+0

謝謝。再一次,持久對象是什麼還包含其他對象。這些內部對象是否也會持續存在?我可以嘗試避免這種情況,但只是要求我自己的知識。 –

+0

簡單的答案是肯定的。它的工作方式與您的進程內會議完全一樣。 –