何时初始化服务类
本文关键字:服务 初始化 何时 | 更新日期: 2023-09-27 17:49:38
如果我使用visual studio创建了一个服务引用,则生成了以下客户端:
public partial class MyServiceClient : System.ServiceModel.ClientBase<MyType>
问题是:何时初始化服务类?(new MyService()何时被调用)当我这样做的时候:
MyServiceClient client = new MyServiceClient();
或者可能只在这里:
client.DoStuff()
?
(我问的原因是因为我想知道服务对象在被垃圾收集之前还存活多长时间)
我认为这取决于绑定。对于普通绑定(SOAP和netcp),客户机在第一次调用之前根本不使用网络。这意味着在此之前没有实例化server对象,因为没有通知服务器。
通常最好使用PerCall
实例化并使服务对象非常便宜。这样你根本不需要考虑这个问题,你甚至不需要这个问题的答案。
服务器端实例化行为由InstanceContextMode
枚举控制,您将其指定为ServiceContract
的一部分。
每个选项的行为如下:
- PerCall - Instance是在服务调用的生命周期内创建的。呼叫完成后回收。
- session - Instance是在与客户端会话的生命周期内创建的。会话关闭(或故障)后回收。
- 单实例在ServiceHost构造函数的第一次调用时创建,并在服务的生命周期内维护。
有一些额外的选项可以改变通过MSDN上的属性暴露的服务器实例释放行为:编辑:
在客户端代理类(本例中为
MyServiceClient
)上调用Open()
方法时,调用 ServiceHost
构造函数