2013-08-27 55 views
0

什麼是最好方式來創建一個WCF service這將適用於許多客戶端,但會提供存儲在服務上的等效信息?創建一個異步 - 單線程WCF服務

我嘗試以下方法:

[ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)] 

但由於服務它singletone它的工作原理很慢(可能是同步)時,有三個以上的客戶。

但是我需要該服務將singletone,因爲我有一個對象,假設到了同樣的信息到所有客戶端(或有另一種方式來做到這一點?)我很想

有其他優惠。

回答

1

您可能想要鎖定對象本身的使用, 或代碼的關鍵部分。 沒有必要製作整個服務單例。 但是,如果沒有看到代碼,很難知道這是否有用。 (因爲如果長時間的計算在關鍵部分鎖定內不會有幫助)。

編輯:

只是爲了澄清我的答案,你的問題無關與WCF。 爲了獲得更好的性能,或者堅持使用單個線程來處理代碼的這一部分,您確實在問是否應該支付代碼複雜性中的代價 。如果對服務的調用是由相同的進程(通過不同的線程)而不是來自WCF客戶端,則您將面臨完全相同的問題。所以我建議你在下定決心之前閱讀更多關於多線程和conecurrent集合。

+0

我的對象是僅在服務中管理的列表。它通過各種呼叫而改變,但僅在服務中。 (這是私人對象) –

+0

嘗試用併發集合替換列表:http://stackoverflow.com/questions/15106938/what-net-4-0-system-collections-concurrent-collection-added-in-functionality-至 。如果這不是一個選項,您需要確保列表中的所有操作都是線程安全的,並且面臨競爭條件的可能性,或者堅持鎖定對列表的每次訪問/使用單件服務 –