0

WCF服務配置爲WCF併發,並OptimisticConcurrencyException

InstanceContextMode = InstanceContextMode.PerCall 
ConcurrencyMode = ConcurrencyMode.Multiple 

我使用實體框架3.1。只有在進行負載測試並且達到五個併發用戶時,我纔得到OptimisticConcurrencyException。

我會同步BLL.Update方法。或者使用ConcurrencyMode.Single。我無法使用ClientWins和StoreWins技術。

我將定義一個私有靜態對象實例並鎖定它以同步對該方法的訪問。我如何防止其中一個線程餓死。有沒有辦法讓鎖定公平?鎖定靜態引用是個好主意嗎?

回答

1

您得到的異常是OptimisticConcurrencyException。由於您的事務正在使用樂觀併發和2個用戶正在更改相同的數據,因此您將獲得此信息。

有ATLEAST 3點的方式來解決這個問題:

  • 設計水平:爲什麼不同的用戶改變了相同的數據?
  • 數據庫級別:使用事務範圍不使用樂觀併發訪問數據庫
  • 週轉基金水平:使用併發模式單一的WCF服務

您與私有靜態對象實例的想法也有同樣的效果就像在單一模式下設置WCF服務一樣。

+0

同意但我使用perCall服務上下文模式,因此我有一個線程和一個新的服務實例每個客戶端請求。在這種情況下使用Single併發模式是無用的,因爲我將鎖定不同的實例對象 – Costa

+0

Ado.net和Entity框架僅適用於樂觀併發或無貨幣模式。 – Costa