你有幾個選擇這裏,尤其是涉及到WCF實例化和併發性。
實例化:在這裏你的選擇是
- PerCall:一個新的InstanceContext(因此服務對象)爲每個客戶端請求創建。
- PerSession:爲每個新的客戶端會話創建一個新的InstanceContext(並因此服務對象),並在該會話的生命週期內維護(這需要支持會話的綁定)。
- 單:單個的InstanceContext(因此服務對象)處理用於應用的生命週期的所有客戶端的請求。
併發:
- 單:每個實例的上下文被允許具有最多一個線程處理的消息中在一個時間實例上下文。希望使用相同的實例上下文中的其他線程必須阻塞,直到原線程退出的實例上下文
- 多:每個服務實例可以有多個線程同時處理消息。服務實現必須是線程安全的才能使用此併發模式。
- 折返:每個服務實例一次處理一個消息,但接受重入操作調用。該服務在通過WCF客戶端對象調用時僅接受這些調用。
讓我們看一下第一個實例化:
每次呼叫:基本上,這裏發生的事情是,如果兩個客戶對您的服務電話,爲您服務的2個不同的實例被創建,然後銷燬,一旦通話結束
每學期:如果這兩個客戶端使每2個呼叫通過代理,您的主機對於這兩個電話上創建的WCF實例將是相同的(每個代理,這樣2個實例服各2但每個調用者都去相同的實例),然後去stroyed
單個:兩個代理/客戶端將使用相同的實例,因此調用者1調用操作,然後調用者2發出呼叫,這個相同的實例將被重用。
非常直截了當。
就併發而言,它一次在上述實例上下文中活動的線程數。在這裏我帶着經驗和MSDN,其中指出「理解和開發安全使用多個線程的代碼可能很難寫」(但不是不可能)
因此根據您的要求,由於您正在服務多個代理服務器,並且您不需要共享任何需要單實例模式的全局數據,因此最可能的解決方案是:
[ServiceBehavior
(ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.PerCall)]
public class YourService: IYourService
{
}
[ServiceBehavior
(ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.PerCall)]
public class YourService: IYourService
{
}
來源
2012-09-05 19:57:40
kd7
非常感謝,這正是我一直在尋找的。 – ManOnAMission