Self host WCF ServiceHost对象生命周期

本文关键字:生命 周期 对象 ServiceHost host WCF Self | 更新日期: 2023-09-27 18:11:29

要启动我的WCF服务,我使用以下命令:

selfHost = new ServiceHost(typeof(MyServiceClass));
selfHost.Open();

在某些时候,这将创建一个MyServiceClass的实例。它会为每个请求创建一个实例还是一个实例?

Self host WCF ServiceHost对象生命周期

如果你想将其限制为单个实例,你可以在外部实例化你的服务类,并将实例传递给servicehost:

var myservice = new MyServiceClass();
selfHost = new ServiceHost(typeof(MyServiceClass), myservice); // forces singleton pattern
selfHost.Open();

默认情况下是每个请求一个实例,但你可以改变它。例如,你可以编写自己的IInstanceProvider,并自己管理服务类的生命周期。

这些答案都是正确的,但是它们似乎比你问的要复杂得多。它是为每个调用、每个会话还是单例创建实例的基础是由InstanceContextMode控制的,InstanceContextMode是服务类的一个属性。

它将为每个请求创建实例。如果需要单个实例,可以使用静态类。静态类在应用程序的生命周期内存在。它们不会在每次有调用或建立新的WCF连接时重新建立。