揭開序幕我的WCF服務,我使用以下命令:自主機WCF的ServiceHost對象的生命週期
selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();
在某些時候,這將創建的MyServiceClass
一個實例。它會爲每個請求創建一個實例還是一個實例?
揭開序幕我的WCF服務,我使用以下命令:自主機WCF的ServiceHost對象的生命週期
selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();
在某些時候,這將創建的MyServiceClass
一個實例。它會爲每個請求創建一個實例還是一個實例?
如果你想將其限制在一個單一的情況下,你可以在外面實例化服務類和實例的通入的ServiceHost:
var myservice = new MyServiceClass();
selfHost = new ServiceHost(typeof(MyServiceClass), myservice); // forces singleton pattern
selfHost.Open();
默認情況下,它的每個請求的實例,但你可以改變這一點。例如,您可以編寫自己的IInstanceProvider並自行管理服務類的生命週期。
加以改變? – spender
@spender,是的,它可以。你可以寫一個自定義的'IInstanceProvider'。例如,當你想在服務類中注入一些依賴關係時,這通常用於DI框架。 –
所有這些問題的答案是正確的,但他們似乎比你所要求的更爲複雜。它是否創建每次通話的情況下,每個會話,或單基本由InstanceContextMode這是您的服務類中的屬性控制。開始閱讀。
注意實施,這將需要改變'MyServiceClass'添加'[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]'。 InstanceContextMode在另一個答案中提到。 –
@DeniseSkidmore此外,如果InstanceContextMode.Single被設置爲比沒有真的需要創建作爲答案描述的服務主機,可以一樣好使用的ServiceHost,它僅使用了創建的類型構造 – Ghita