簡體   English   中英

如何在多線程WCF Web服務中正確使用ServiceBehaviorAttribute.InstanceContextMode?

[英]how to use ServiceBehaviorAttribute.InstanceContextMode correctly in multithreaded WCF Web Service?

我有ConcurrencyMode.Multiple和I​​nstanceContextmode.PerSession,但我不理解后者。

在我的應用程序中,我喜歡這樣:

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

但是http://msdn.microsoft.com/zh-CN/library/system.servicemodel.instancecontextmode(v=vs.110).aspx

告訴“對於單例生存期行為(例如,如果主機應用程序調用ServiceHost構造函數並傳遞一個對象用作服務),服務類必須將InstanceContextMode設置為InstanceContextMode.Single,否則當服務主機時會引發異常打開。”

那不是我在做什么嗎? 它工作正常並且是多線程的。 如果有人可以向我解釋PerSession和PerCall值,我將不勝感激。 會議不是電話嗎?

當您將服務類類型作為參數傳遞時,您希望該類的實例按需創建(收到客戶端調用時)。 因此,您不必自己控制服務實例的生存期。 實例化有兩種:

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

PerSession :為每個新的客戶端會話創建一個新的InstanceContext(並因此創建服務對象),並在該會話的整個生命周期內對其進行維護(這需要支持會話的綁定)。

如果要自己控制實例化,則必須初始化類並將該對象作為參數傳遞給ServiceHost構造函數。 稱為“單”實例化模式:

單個 :單個InstanceContext(以及相應的服務對象)在應用程序的生命周期內處理所有客戶端請求。

在這種情況下,您必須在服務類中將ServiceBehaviorAttribute.InstanceContextMode屬性設置為Single:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM