![](/img/trans.png)
[英]Create wcf web service with instanceContextMode = PerSession
[英]how to use ServiceBehaviorAttribute.InstanceContextMode correctly in multithreaded WCF Web Service?
我有ConcurrencyMode.Multiple和InstanceContextmode.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.