如果我使用visual studio创建了服务引用,则会生成以下客户端:
public partial class MyServiceClient : System.ServiceModel.ClientBase<MyType>
问题是:服务类何时被初始化? (什么时候是&#34;新的MyService()&#34;被叫) 当我这样做时:
MyServiceClient client = new MyServiceClient();
或者可能只在这里:
client.DoStuff()
?
(我问的原因是因为我想知道服务对象在被垃圾收集之前还活着多久)
答案 0 :(得分:1)
这取决于我认为的约束力。对于公共绑定(SOAP和NetTcp),客户端在第一次调用之前根本不使用网络。这意味着在此之前未实例化服务器对象,因为服务器未得到通知。
通常最好使用PerCall
实例化,并使服务对象非常便宜。这样你根本不需要考虑这个问题,你甚至不需要这个问题的答案。
答案 1 :(得分:1)
服务器端实例化行为由您InstanceContextMode
指定的ServiceContract
枚举控制。
每个选项的行为如下:
有一些额外的选项可用于更改通过MSDN : ServiceBehaviorAttribute
上的属性公开的服务器实例发布行为修改强>
在客户端代理类上调用ServiceHost
方法时调用 Open()
构造函数(在本例中为MyServiceClient
)