2011-03-04 165 views
12

是否可以構建完全自定義的會話狀態模式而不是使用Inproc或SQLServer?ASP.Net自定義會話狀態管理

+1

FYI:你能想到的.NET配置幾乎一切是基於「提供者模型」,這意味着,你可以寫提供商的東西各類。唯一的缺點是,app.config/web.config有時會因此而變得有點多毛。 ;-) – BrainSlugs83 2012-10-22 14:35:25

回答

10

是的,當然,你可以寫在web.config中一個custom session state store provider通過實施SessionStateStoreProviderBase類,然後設置會話狀態模式這個定製的實現:

<sessionState 
    mode="Custom" 
    customProvider="SomeCustomProviderName"> 
    <providers> 
     <add name="SomeCustomProviderName" 
      type="YourNamespace.CustomSessionStateStore" 
      connectionStringName="SomeConnectionString" /> 
    </providers> 
</sessionState> 
0

這是與一些舊的問題,我做在這裏,現在十月的2014年

基本上,最初的答案仍然是正確的,因爲你可以構建您自己的定製OutProc會話狀態管理系統,但微軟現在更加關注開源,您可以輕鬆前往MSOpenTech and download the Redis port for Windows,這也受到Windows Azure的支持。

Redis是一個OutProc會話狀態管理系統,可以在獨立的進程/控制檯窗口中運行,也可以作爲用於背板會話/鍵值存儲的Windows服務運行。

MSOpenTech:

Redis是一個非常流行的開源,網絡,內存,鍵值 數據存儲。它以高性能,靈活性,數據結構豐富的集合以及簡單直接的API而聞名。微軟開放技術有 一直與Redis社區合作建立一個生產就緒 Redis的Windows端口,包括64位支持,Windows Azure的安裝程序,NuGet支持等等。

Redis.io簡介:

的Redis是一個開源的,BSD授權的,先進的鍵值緩存和 店。因爲它可以 包含字符串,散列,列表,集合,排序集合,位圖和 hyperloglogs

你可以用它來存儲會話狀態的ASP.NET MVC鍵通常被稱爲數據結構服務器, WebAPi和SignalR在Web農場環境中非常方便。

安裝,包裝Microsoft.Web.RedisSessionStateProvider

它很容易通過的web.config配置,當我說的容易,我的意思是容易的。

<system.web> 
    <sessionState mode="Custom" customProvider="MySessionStateStore"> 
     <providers> 
     <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" port="6379" accessKey="" ssl="false" /> 
     </providers> 
    </sessionState> 
</system.web> 

這麼容易,其實我起初以爲我一定是做錯了。;) 但這只是將會話狀態轉移到Redis所需的全部資源。

它的高性能端口,非常接近原來的POSIX版本。

我們正在使用它作爲金融服務應用程序,它遇到通過Signalr進行實時推送和高負載的高負載,如上所述還支持Redis以維護中心會話狀態。

因此,儘管您仍然可以接受答案,但大約3年半之後,我會考慮通過OSS免費提供的默認ASP.NET會話管理體驗的一些替代方案。

https://github.com/MSOpenTech/redis

http://www.codeproject.com/Articles/636730/Distributed-Caching-using-Redis