簡體   English   中英

負載均衡器后面的Session_End事件

[英]Session_End event behind load balancer

我正在負載均衡器后面創建Web應用程序。 到目前為止,我已將其配置為將會話存儲在數據庫中,但不確定如何處理會話過期。 問題不是不是沒有從數據庫中刪除會話,而是從Session_End事件中刪除了會話,因為我必須在其中調用某些Web服務方法。

假設Session_End在過期時被調用,我擔心的是在一個服務器上創建會話但在另一台服務器上完成會話的情況。 在這種情況下,我擔心第一台服務器上的Session_End將過早執行,並且我將過早調用Web服務。 在這種情況下,您有何建議?

編輯:

我記得前段時間讀過有關Sql Agent對會話結束事件做出反應,然后執行自定義代碼的信息。 有人可以確認這種解決方案可行嗎?

除非您使用進程內會話狀態,否則不支持會話結束事件。 您可以查看ScaleOut Software StateServer。 我正在為自己的環境考慮這一點。 它實現了分布式會話狀態並支持會話結束事件。

編輯以添加更多信息:

他們的網站更好地解釋了我的工作( 詳細信息頁面 ),但這是一個快速摘要。 ScaleOut(或類似的小工具)使用分布式緩存來管理會話狀態。 這意味着每個服務器上的一個進程都保存會話數據。 進程在服務器之間進行通信,以便所有數據在所有服務器之間共享-不論哪個服務器正在處理用戶請求,都可以使用相同的會話數據。 如果您的一台服務器發生故障,則所有會話數據都會保留,因為它們分布在所有服務器上。 相反,asp.net提供僅在單個服務器上工作的進程內會話狀態,將會話數據保存在單獨的單個服務器(單個故障點)的會話狀態服務器或sql服務器會話狀態,這是相當可觀的。強大,但會影響性能。

這不就是為什么要在數據庫中存儲會話信息嗎?

這解決了“會話在哪個服務器上”的問題。

如下所述,Session_End僅在inProc會話中調用,您將不會使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM