自托管WCF ServiceHost对象生存期

时间:2011-10-18 12:46:16

标签: c# .net wcf servicehost self-hosting

要启动我的WCF服务,请使用以下内容:

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

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

4 个答案:

答案 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连接时,它们都不会被重新实例化。