2014-09-25 80 views
1

我有ConcurrencyMode.Multiple ans InstanceContextmode.PerSession,但我不明白後者。如何在多線程WCF Web服務中正確使用ServiceBehaviorAttribute.InstanceContextMode?

在我的應用我這樣做:

ServiceHost host = new ServiceHost(typeof(MyService), baseAddress); 

http://msdn.microsoft.com/en-us/library/system.servicemodel.instancecontextmode(v=vs.110).aspx

告訴「對於單身一輩子的行爲(例如,如果主機應用程序調用ServiceHost的構造函數,並傳遞一個對象使用作爲服務),服務類必須將InstanceContextMode設置爲InstanceContextMode.Single,或者在服務主機打開時引發異常。「

不是我在做什麼?它工作正常,它是多線程的。如果有人能夠解釋我的PerSession和PerCall值,我會非常感激。會議也不是電話嗎?

回答

1

當您將服務類類型作爲參數傳遞時,您希望按需創建該類的實例(當收到客戶端調用時)。所以你不能自己控制服務實例的生命週期。有2種類型實例化的:

PerCall:一個新的InstanceContext(並且因此服務對象)爲每個客戶端請求創建。

PerSession:一個新的InstanceContext(並且因此服務對象)對每個新的客戶端的會話創建和維護該會話的壽命 (這需要結合支持會話)。

如果您想自己控制實例化,則必須初始化該類並將該對象作爲參數傳遞給ServiceHost構造函數。這就是所謂的「單」實例化模式:

:單個的InstanceContext(因此服務對象)處理用於應用的生命週期的所有客戶端的請求。

在您必須設置ServiceBehaviorAttribute.InstanceContextMode屬性單在服務類情況:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class MyService : IMyService 
{ 
    public void SomeMethodHere(parm) {} 
} 
相關問題