2013-06-05 33 views
0

在我的WCF服務端,我有一個定義爲XXService:WCF InstanceContextMode單和異步通信

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

XXService使用的ServiceHost(類別,地址)託管的應用程序內承載。我提供了一個類而不是接口,因爲我的類有自定義構造函數。

我的服務假設要執行並行操作,並且不能阻止調用。
我使用IAsyncResult模式,在我的BeginOperation上我發送實際工作到ThreadPool.QueueUserWorkItem來做這項工作,以避免阻塞我的XXService。
此模式是否正確?

該服務的功能是同步的。

我的關注是我應該使用PerCall?使用PerCall而不是做我所做的(使用Unity和WCF會花費很多,因爲我的XXService需要自定義構造函數)有什麼好處?

如果我的XXService的實例會拋出未處理的異常,它將使ServiceHost出錯。但是這與InstanceContext single/percall無關。

回答

0

你可以通過這個link得到更好的理解併發和實例化在WCF的..

+0

感謝我熟悉,他們不解釋什麼是錯在我的方法VS PerCall – ilansch

+0

這是我的理解你的問題.. 1.你有一個單一的實例,你通過一個單獨的IAsync worker來響應每個請求。 2.你想使用PerCall來提高性能..我說得對嗎? – Mullaly

+0

我想知道如果使用單實例併發送到線程池的工作,將做同樣的事情作爲PerCall沒有實例化許多服務實例。這樣我會有單個實例,它會避免阻塞該實例,因爲我將工作發送到線程池。它不會爲每個呼叫實例許多XX服務。 – ilansch