2012-07-26 101 views
2

我想開發一個新的自定義會話狀態提供程序或使用現有的(分佈式緩存,sql ...)。我們的主網站每天的訪問量超過10 000 000次。如果出現錯誤或性能下降,我們提供簡單的回滾/切換非常重要。更改web.config不是最佳選擇,因爲我們有20多個前端服務器。我們的想法是在會話提供程序(從我們的定製到InProc)與數據庫中的簡單配置之間切換。ASPNET:在會話狀態提供程序之間切換?

是否有可能擁有多個會話狀態提供程序或在提供程序之間輕鬆切換?

我在這裏找到http://netpl.blogspot.fr/2007/06/wrapped-inprocsessionstatestore.html,這是一個通用包裝器的解決方案,但它看起來不太健壯。

感謝,

+0

我不知道,爲什麼你認爲鏈接解決方案不健壯。此外,作爲回退,當您的Web應用程序部署在網絡服務器場(20臺前端服務器)時,您不應該退回到InProc – Ramesh 2012-07-27 02:40:03

回答

1

只是爲了將來參考,這是不可能動態地改變會話狀態提供者。

+0

這是否仍然如此? – ayasha 2015-09-17 13:30:56

0

它不..完全真實..你可以做這樣的使用反射:

var privateFieldFlags = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic; 

//Get session state section 
var sessionStateSection = ConfigurationManager.GetSection("system.web/sessionState") as SessionStateSection; 
var values = typeof(ConfigurationElement).GetField("_values", privateFieldFlags).GetValue(sessionStateSection); 
var entriesArray = values.GetType().BaseType.GetField("_entriesArray", privateFieldFlags).GetValue(values); 

//Get "Mode" entry (index: 2) 
var modeEntry = (entriesArray as System.Collections.ArrayList)[2]; 
var entryValue = modeEntry.GetType().GetField("Value", privateFieldFlags).GetValue(modeEntry); 

//Change entry value to InProc 
entryValue.GetType() 
     .GetField("Value", privateFieldFlags) 
     .SetValue(entryValue, System.Web.SessionState.SessionStateMode.InProc); 

引用:
Dynamic session state provider
http://www.answerandquestion.net/questions/4447903/dynamic-session-state-provider

相關問題