2010-06-30 27 views
0

我有一個同步使用的WCF服務,但它的ConcurrencyMode設置爲ConcurrencyMode.Multiple值,因爲服務實際上是無狀態的。這種模式需要多少開銷?將模式更改爲ConcurrencyMode.Single是否有意義?WCF。 ConcurrencyMode.Multiple的開銷

回答

3

它並沒有真正強加任何開銷 - 除了單個服務實例必須處理併發訪問的事實,它必須是200%線程安全的 - 這是相當棘手的編程。

切換到ConcurrencyMode.Single使編程變得更簡單 - 不再擔心服務類中的併發問題。但它將所有請求序列化 - 每次只能處理一個請求,因此會很快成爲性能瓶頸。

你提到你的服務是無狀態的 - 那麼爲什麼不使用通常認同的最佳實踐 - 不是單身人士,而是定期的「每次通話」服務。在這種模式下,每個請求都會得到一個全新的服務類實例,不需要多線程編程(所有多線程都由WCF運行時處理),您可以同時處理多個請求 - 對我來說,這只是好處,沒有下側!

+0

感謝您的回答。 關於「per-call」模式,我打算稍後將一些線程安全的依賴關係添加到服務中。所以我不認爲這是使用「per-call」模式的最佳選擇。 – 2010-06-30 14:18:05

+0

@bsnote:爲什麼不?如果服務確實是無狀態的,爲什麼不使用最簡單的模型呢?爲什麼你對自己做出不必要的困難和困難? – 2010-06-30 14:29:16

+1

問題在於,每次創建服務時都會向服務注入依賴關係。創建時間可能並不重要,但如果不需要處理併發性問題,這種情況下「每次調用」模式的優點是什麼? – 2010-06-30 20:03:51