0

我以前聽說過在項目中早期使用SqlServer/StateServer,因此當您擴展時,不要陷入使用非可序列化對象InProc的開發人員的陷阱中,並且在遷移到SqlServer/StateServer時會陷入困境後來。爲InProc強制執行序列化會話狀態訪問?

目前我們不需要使用SqlServer會話狀態的InProc,因爲我們剛剛啓動,但我們可能需要快速合理擴展。

在使用InProc時,有沒有人在強制實現可序列化對象時有任何建議?也許創造一個包裝?

回答

2

重要的是要記住,使用SqlServer/StateServer不僅僅是擴展(Web農場)。即使在一臺服務器上,當使用InProc會話時也會遇到問題。基本上,當使用InProc時,當應用程序池回收丟失時,任何「實時」會話。爲了說明這一點,您可能正在運行購買渠道,並在會話中存儲對流程至關重要的內容(爲什麼這可能是糟糕的做法是另一次對話)。無論如何,如果會話信息損壞/丟失,那麼用戶將無法繼續。因此,應用程序池會回收並丟失任何當前的實時會話 - 因此,當前處於購買渠道中的任何客戶都將退出並可能丟失。

僅僅因爲這個原因,我總是推薦至少在本地運行SqlServer會話。更好的架構通常會抵消任何性能問題。如果你碰到性能問題,你可以看看第三方的StateServer實現,我應該更快。

如果在閱讀在現場服務器上運行InProc的缺點,你仍然很樂意這樣做(他們是你的理由,所以這很好),我唯一可以推薦的是改變你的開發服務器(或測試)使用SqlState運行並離開實時運行InProc。這樣您就可以看到環境中沒有使用InProc的任何問題,並且可以在非現場環境中修復它們。然後,如果您決定切換Live,則會知道它不需要任何額外的開發工作,所有內容都應該可以。

+0

感謝@Paul的建議。 – 2012-05-03 11:53:47