要启动我的 WCF 服务,我使用以下命令:
selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();
在某些时候,这将创建一个MyServiceClass
. 它会为每个请求创建一个实例还是一个实例?
要启动我的 WCF 服务,我使用以下命令:
selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();
在某些时候,这将创建一个MyServiceClass
. 它会为每个请求创建一个实例还是一个实例?
默认情况下,它是每个请求的一个实例,但您可以更改它。例如,您可以编写自己的IInstanceProvider并自己管理服务类的生命周期。
如果您想将其限制为单个实例,您可以在外部实例化您的服务类并将实例传递给服务主机:
var myservice = new MyServiceClass();
selfHost = new ServiceHost(typeof(MyServiceClass), myservice); // forces singleton pattern
selfHost.Open();
所有这些答案都是正确的,但它们似乎比你所问的更复杂。它是每次调用、每次会话还是单例创建实例的基础是由InstanceContextMode控制的,它是您的服务类的一个属性。从那里开始阅读。
它将根据请求创建实例。如果你想要一个实例,你可以使用一个静态类。静态类在应用程序的生命周期中存在。每次有呼叫或建立新的 WCF 连接时,它们都不会被重新实例化。