2010-12-09 83 views
2

想象一下,一個網站,個人客戶可以看到彼此的存在 - 比如社交網絡或聊天室。來自多個客戶端的多個ASP.NET請求如何共享信息?

例如:
Client1連接到我的網站。
後端C#代碼更新一個靜態字段以指示Client1的存在。
Client2連接到我的網站。
第二個請求的後端C#代碼是否會從第一個請求中查看存儲在靜態字段中的信息?有什麼我需要做的,以確保我的ASP應用程序的這些單獨的實例共享靜態數據?

+1

您需要將這些數據存儲在兩個會話均可訪問的地方,我建議您將其存儲在緩存,應用程序或數據庫中。 – Zachary 2010-12-09 05:18:45

回答

2

這完全取決於您試圖分享哪些信息。各種選項可以是:

  • 數據庫
  • 緩存
  • 應用程序變量

每一個選項是適用於特定的需求。您需要仔細確定您的需求,然後分析每個選項或其組合以找到完美的解決方案。

如果你正在尋找只是共享狀態信息,你可以看看這個帖子在這裏 How to tackle this session problem in ASP.NET,VB.NET?

+0

看起來數據庫畢竟是最好的選擇。穩定性和可擴展性是值得的性能打擊和內存中的應用程序分離。 – Giffyguy 2010-12-09 05:49:10

1

如果它是靜態字段,他們正在編輯然後它將在不同的用戶之間共享。唯一應該關注的是,不同線程之間不共享靜態對象的原因是,如果您擁有託管應用程序的不同Web服務器(例如負載平衡體系結構),因爲它將是不同的應用程序域。

2

您還可以使用Application狀態或Cache在所有客戶端之間共享信息。

在一個ASP.net應用程序中,應用程序/緩存將是跨應用程序共享信息的常用方法之一。

但是,您需要首先考慮以下事項以確保它符合您的特定需求。

在使用應用程序的狀態,你必須知道的各種注意事項:

  1. 資源
  2. 波動
  3. 可擴展性
  4. 併發

請參閱節 「申請國注意事項」在上面的鏈接中瞭解更多關於在決定你的決定之前需要考慮的事情 選擇。

1

我會考慮使用一個Windows服務,Web應用程序(一個或多個)可能無法通過WCF溝通。

這會讓你有很大程度的靈活性;它允許您在流程外執行額外的數據處理(例如,彙總在線統計數據,例如「擴展網絡中的50人在線」)。 Windows服務還可以完全將您從進程狀態機制中的任何限制中解放出來。它將允許您自由地進行負載均衡,並讓多個應用程序使用其數據。

如果數據是可消耗的,則使服務成爲無狀態。否則,將一些/全部/週期性數據保存到數據庫中,即使服務和/或網站停機,也可以恢復數據庫。

最後,如果您構建的應用程序依賴於服務,則潛在的單點故障。最佳安裝使用數據庫或同步機制來確保進程外服務的冗餘。

編輯:爲了提供更多關於原始問題的詳細信息,靜態成員可用於所有到您的ASP.Net網站運行的應用程序域的HTTP請求。對於它的價值,也可以指定靜態變量(通過屬性)與不同的訪問級別,例如ThreadStaticAttribute

實際上,靜態變量是一個便宜/弱的解決方案。您必須手動同步訪問權限,並且您幾乎無法控制到期。您可以無需額外工作就可以實施基於緩存的解決方案,或者轉向上述的流程外方法來支持企業需求。

相關問題