2013-03-13 93 views
1

我有WCF服務,爲這個服務生成當我添加Service ReferenceWCF客戶包裝線程安全

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Single, 
    IncludeExceptionDetailInFaults = true)] 
public class ClientAPI : IClientAPI { ... } 

和.NET包裝。

包裝對象線程安全嗎?我的意思是我可以從不同的線程調用此客戶端對象的方法,而無需同步對象本身的訪問權限?

+1

參見:http://blogs.msdn.com/b/drnick/archive/2007/12/18/concurrent-channel-performance.aspx – CodeCaster 2013-03-13 07:55:35

+0

感謝。所以它是線程安全的。你爲什麼不把它作爲答案發布,所以我可以評價它並關閉這個問題? – axe 2013-03-13 08:01:00

回答

2

是的,用這樣的模型你的服務實例將被創建一次,並且每個查詢都將被相應地處理。但是你必須檢查你的服務狀態,因爲如果失敗了,你必須創建新的實例。這將這樣的工作,在一個單獨的線程 enter image description here

+0

謝謝。你能否詳細解釋爲什麼我應該檢查狀態,爲什麼它會失敗? – axe 2013-03-13 08:19:26

+0

@axe如果您的服務得到異常,但處理不當,您的服務將陷入Faulted狀態,並且您的所有客戶端都將收到CommunicationObjectFaultedException。有關服務狀態,請參閱http://msdn.microsoft.com/en-us/library/ms789041.aspx。並根據http://msdn.microsoft.com/en-us/library/ms789039.aspx你必須恢復它 - 「創建一個新的對象。」 – Alex 2013-03-13 08:27:43