【发布时间】:2012-02-14 21:47:47
【问题描述】:
我正在开发一个包含多个 WCF 服务引用的 Web 应用程序。目前,每次我们需要调用服务时,我们都会执行以下操作(例如):
Service.ServiceClient ServiceClient = new Service.ServiceClient();
ServiceClient.SomeMethod();
最好有一个静态类,其中包含对每个服务的静态引用,然后调用该类,从而避免每次我们想要调用它时都创建一个新的 ServiceClient 对象实例?
例如:
public static class Services
{
private static Service.ServiceClient _ServiceClient = new Service.ServiceClient();
public Service.ServiceClient ServiceClient
{
get
{
return _ServiceClient;
}
}
}
而且,如果这样做,行会
private static Service.ServiceClient _ServiceClient = new Service.ServiceClient();
每次我们尝试调用该对象时都会创建一个新对象,或者每次我们调用它时它都会是该对象的同一个实例?
【问题讨论】:
-
它将在每次调用时创建一个新实例,不管下面的通道工厂如何在不同实例之间共享资源,这就是为什么你必须在完成每个实例后关闭()以释放共享的所有实例之间的资源。
-
另外,如果您对所有调用都使用相同的代理对象,并且由于某种原因调用失败,则除非您 Abort() 和长篇大论,否则该对象将无法使用。它被设计为以这种方式使用,创建代理的实例,调用您的方法,最后关闭()实例。
标签: c# wcf service-reference