2013-03-07 277 views
2

我有兩種方法簡單的WCF服務:寫,讀。第一種方法將簡單的數據存儲在某個存儲中,另一種方法將通過鍵讀取這些數據。WCF服務共享存儲

寫入方法調用後應該可以正確讀取數據。數據也應該在短時間內存儲(可配置,如10分鐘TTL)。

爲不同用戶存儲這些數據的最佳解決方案是什麼?

類似於System.Runtime.Caching/memcached/mongodb?

UPD。任何建議?不理想但很好?

+0

它依賴。數據在檢索後是否必須保留?這是在多線程環境中嗎?你想存儲的數據有多大? – RoelF 2013-03-07 13:25:36

+0

多線程環境 - YES;即使檢索數據,數據是否仍然保留 - YES;數據大小很小,每個項目幾kb; – barbarian 2013-03-07 13:57:29

+0

你會存儲數百個項目還是更像數百萬?數據是否需要保留即使IIS主機被回收? – 2013-03-07 21:35:42

回答

2

,可以有以下選擇:

1 System.Runtime.Caching

優點:

  • 內置,價格便宜落實
  • 有到期機制

缺點:

  • 併發的問題,您的鑰匙將需要獨特
  • 惡意用戶可以在一個簡單的按鍵
  • 數據的情況下,獲取其他用戶的數據WCF服務主機重新啓動後將會丟失

2. WCF Session

優點:

  • 簡單訪問緩存數據,同一個服務實例用於處理用戶請求。
  • 沒有併發問題,用戶被會話隔離。

缺點:

  • 內存開銷,對於每個會話
  • 創建單個服務實例約束工作流與會話開始/結束[OperationContract的(IsInitiating =真,IsTerminating =真)]
  • 數據將在wcf服務主機重啓後丟失

3. ASP.NET session state

優點:

  • 與持久性機制內置的會話(數據不丟失的重啓,看到的sessionState模式= 「SQLServer的」)。
  • 沒有併發問題,用戶被會話隔離。

缺點:

  • 只能工作在兼容模式下,把兩種技術。
  • 需要SQL Server

4.自我實現的存儲,從文件系統到SQL Server/MongoDB的

優點:

  • 數據不會丟失在重新啓動
  • 根據職位可能有內部數據過期機制。

缺點:

  • 的部署/配置/支持成本
  • 手冊執行
  • 手冊用戶隔離/併發性/安全處理

根據您的意見答案,你有: 多線程環境,其中數據必須保留,即使它被檢索到 (我假設直到過期時間用完),並且數據量很小,每個項目幾kb; 您將存儲數百個項目,並且即使在服務重新啓動後也需要保留數據(再次,直到過期)。

現在,它取決於 - 生產級系統可能需要容錯, 負載平衡和擴展 - 我會選擇sql server,儘管這意味着更高的開發成本。

如果您需要爲測試/演示目的快速和骯髒的解決方案 - 去與內存緩存(當然,在這種情況下,你將有restart-要求後放棄-persist)。

另一種快速的解決辦法是將存儲在臨時文件,其中關鍵是文件名的數據。這會在重新啓動之間持續數據,但是在安全性和併發性方面會有相同的問題。