想清楚瞭解WCF的工作原理。 假設一個WCF服務已經暴露了一個函數A. 現在客戶創建了5個線程,並且每個線程都調用具有不同參數的函數A.WCF如何照顧到服務器的多個客戶端調用?
我認爲這應該發生 - 函數A的新實例會創建爲每個線程調用該函數。有人可以證實這一點。 我寫了一個沒有這樣做的POC,它給出了不一致的結果。
想清楚瞭解WCF的工作原理。 假設一個WCF服務已經暴露了一個函數A. 現在客戶創建了5個線程,並且每個線程都調用具有不同參數的函數A.WCF如何照顧到服務器的多個客戶端調用?
我認爲這應該發生 - 函數A的新實例會創建爲每個線程調用該函數。有人可以證實這一點。 我寫了一個沒有這樣做的POC,它給出了不一致的結果。
默認值是爲每個呼叫創建一個新的wcf服務實例, here
有沒有這樣的事情,像一個新的功能實例。這將是相當類的實例。
您可以通過更改適當的元屬性來配置您的服務應該如何工作。
你可以讓你的服務實現每次調用實例化。它也可以作爲單例(所有調用都是唯一的服務實例)。
Here you can find information on creating singleton WCF service
這通過ServiceBehavior屬性取決於您的服務配置的類實現您的服務合同:
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.PerSession,
ConcurrencyMode = ConcurrencyMode.Multiple)]
使用參數InstanceContextMode
你告訴WCF你怎麼想主辦您的服務:
接下來的事情是同步,當一個主機對象收到並行操作調用時。您可以使用ConcurrencyMode
參數控制的行爲:
確切地說 - 「每個呼叫」模型 - 每個呼叫獲取一個新的服務類實例 - 是首選的和默認的實例化模型。偉大的MSDN Magazine文章來說明 – 2010-12-23 10:21:56
默認實際上是PerSession。它早在2006年就是CTP版本中的PerCall,但在發佈之前進行了更改。但是,如果綁定不支持會話(例如BasicHttpBinding),它將按照每次調用行事。 – 2012-01-16 12:36:18