服务类何时初始化?

时间:2015-05-19 11:04:02

标签: c# web-services wcf proxy-classes channelfactory

如果我使用visual studio创建了服务引用,则会生成以下客户端:

public partial class MyServiceClient : System.ServiceModel.ClientBase<MyType>

问题是:服务类何时被初始化? (什么时候是&#34;新的MyService()&#34;被叫) 当我这样做时:

MyServiceClient client = new MyServiceClient();

或者可能只在这里:

client.DoStuff()

(我问的原因是因为我想知道服务对象在被垃圾收集之前还活着多久)

2 个答案:

答案 0 :(得分:1)

这取决于我认为的约束力。对于公共绑定(SOAP和NetTcp),客户端在第一次调用之前根本不使用网络。这意味着在此之前未实例化服务器对象,因为服务器未得到通知。

通常最好使用PerCall实例化,并使服务对象非常便宜。这样你根本不需要考虑这个问题,你甚至不需要这个问题的答案。

答案 1 :(得分:1)

服务器端实例化行为由您InstanceContextMode指定的ServiceContract枚举控制。

每个选项的行为如下:

  • PerCall - 在服务调用的生命周期内创建实例。呼叫完成后回收。
  • PerSession - 在与客户端的会话的生命周期中创建实例。会议结束(或出现故障)后进行回收。
  • 单一 - 在第一次调用ServiceHost构造函数时创建实例,并在服务的生命周期内进行维护。

有一些额外的选项可用于更改通过MSDN : ServiceBehaviorAttribute

上的属性公开的服务器实例发布行为

修改

在客户端代理类上调用ServiceHost方法时调用

Open()构造函数(在本例中为MyServiceClient