2014-09-23 91 views
0

我正在使用WCF。我想要併發類型multiple,意味着每個請求上有多個線程。我已經在Service類實現中定義的方法和接口中的原型定義中設置了參數。我使用的服務下面的參數如下當WCF併發模式設置爲多個時,連接失敗

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, 
    InstanceContextMode = InstanceContextMode.PerCall, 
    ReleaseServiceInstanceOnTransactionComplete = false, 
    TransactionIsolationLevel = System.Transactions.IsolationLevel.ReadCommitted)] 
    public class BusinessPartnerService : IBusinessPartnerService 

現在,當我呼籲我的服務有任何方法從一個服務到另一個,然後拋出一個異常:

基礎連接被關閉:一個服務器關閉了預期保持活動狀態的連接。

我是否缺少一些配置或其他內容?任何幫助將不勝感激。

+0

你在使用SoapUI這樣的工具嗎?它可能僅取決於客戶端配置。 – Codor 2014-09-23 06:30:50

回答

1

ConcurrencyMode.MultipleInstanceContextMode.PerCall使得沒有意義在一起。

InstanceContextMode.PerCall意味着,每一個單獨的請求會得到服務類的公司自己的實例來處理請求 - 因此,ConcurrencyMode.Multiple是完全沒有意義的,因爲每個請求都有自己的服務類的實例反正。

還有沒有多線程/請求的可能性想要使用相同的服務類實例 - 無論如何 - 每個人都有自己的實例。

在WCF中執行任務的首選方式是InstanceContextMode.PerCall(每個請求都有自己獨立的服務類實例來處理它的工作)與ConcurrencyMode.Single相結合(因爲每個服務類實例將永遠只處理單個請求!)

ConcurrencyMode.Multiple只有當您有一個需要同時處理多個請求的單例服務類(InstanceContextMode.Single)時纔有意義。然而,這然後會在你身邊帶來很多額外的努力 - 該服務類單例的實現必須是100%線程安全 - 這不是一件容易的事情!

+0

以及InstanceContextMode.PerSession如何。那種情況會發生什麼?在這種情況下它不會工作正常嗎? – 2014-09-23 09:14:32

+0

@NomiAli:per-session表示:第一次調用獲得一個全新的服務類實例,並且每個後續調用都會得到相同的實例 - 但是又一次:**每個**請求都有**自己的實例**的服務類 - 完全不需要'ConcurrencyMode.Multiple'! – 2014-09-23 09:27:37

+0

它的意思如果我想實現併發對多個服務與不同的線程併發工作我需要使用Single InstanceContextMode和代碼對它? – 2014-09-23 09:51:25

相關問題