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