簡體   English   中英

在不使用inprpc或狀態服務器的情況下,需要在Web場中的頁面刷新之間在ASP.NET中保存數據塊

[英]Need to save block of data in ASP.NET between page refreshes in web farm without using inprpc or state server

我有一個運行在服務器場中的asp.net應用程序。 因此,過程中會話已結束。 沒有狀態服務器。 有一個sql server數據庫(不能用於狀態服務器)。 沒有強制相同的Web服務器服務功能,因此無法保證哪個Web服務器將服務下一頁。

我需要在頁面之間保存一個數據塊(大對象狀態)。 我不想使用viewstate,因為數據可能很大,並且不希望它遍歷整個網絡。 我可以使用數據庫來保存數據,並在視圖狀態下跨線使用記錄ID,並檢索下一頁的數據。

有更好的解決方案嗎?

我可以使用數據庫來保存數據,並在視圖狀態下跨線使用記錄ID,並檢索下一頁的數據。

您已經消除了所有其他選擇。

好吧,我想您已經排除了大多數選擇。 假設您無法安裝其他服務,那么我想到了另外兩種可能性:

  1. 使用可寫文件共享來存儲數據。
  2. 允許各個Web服務器相互通信。 例如,將機器的IP或名稱作為生成的唯一標識符的一部分; 這樣,如果您在回發時到達其他服務器,則該服務器可以調用原始服務器獲取其數據。 請注意:如果一台服務器出現故障(或者ASP.NET進程被回收),則所有數據都將丟失。*我希望,無論該主題如何,都不會經常發生。

與在SQL Server版本中一樣,不要忘記以某種方式清理數據。 選項1在這方面與SQL Server非常相似,但是對於SQL Server來說,它可能僅僅是集中式清理作業,在文件共享的情況下,問題變為:哪台服務器是中心?

*)當然,您可以嘗試從ASP.NET生成輔助進程。 這里的問題變成了:如果該過程有問題怎么辦? 默認情況下,它對於您的系統管理員是不可管理的,除非將其設置為可管理。

我不確定我是否閱讀正確,但是您不能使用數據庫存儲asp.net會話嗎?

<sessionState
      mode="SQLServer"
      sqlConnectionString="somedb"
      cookieless="AutoDetect"
      timeout="20"
    />

您還可以使用某種分布式緩存解決方案,例如memcached(http://www.danga.com/memcached/) ,它可以在回發之間保留數據。

暫無
暫無

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

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