3

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

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

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

4

4 回答 4

4

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

于 2011-10-18T12:47:49.437 回答
4

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

var myservice = new MyServiceClass();
selfHost = new ServiceHost(typeof(MyServiceClass), myservice); // forces singleton pattern
selfHost.Open();
于 2011-10-18T12:49:14.603 回答
4

所有这些答案都是正确的,但它们似乎比你所问的更复杂。它是每次调用、每次会话还是单例创建实例的基础是由InstanceContextMode控制的,它是您的服务类的一个属性。从那里开始阅读。

于 2011-10-18T14:29:49.183 回答
0

它将根据请求创建实例。如果你想要一个实例,你可以使用一个静态类。静态类在应用程序的生命周期中存在。每次有呼叫或建立新的 WCF 连接时,它们都不会被重新实例化。

于 2011-10-18T13:09:49.883 回答