静态WCF服务客户端对象或标准WCF服务客户端对象?

时间:2013-11-15 17:14:50

标签: c# asp.net wcf static-methods static-members

我正在ASP.NET中开发一个使用WCF服务的网站。我正在使用以下方法创建服务客户端对象:

  

我正在使用Global类文件来定义这些方法。

public static WCore.Service1Client client;
public static int ConnectToWCore()
{
    try
    {
       client = new WCore.Service1Client();
    }
    catch (Exception)
    {
       return -1;
    }
    return 0;
}

所以我的问题是,在网站上使用静态客户端对象是否正确?因为我很困惑它可能会遇到死锁问题,因为许多用户将访问同一个对象,因为静态对象只创建一次并且对所有实例都是通用的。请告诉我哪一个是高效静态对象还是标准对象?

2 个答案:

答案 0 :(得分:2)

WCF客户端应该是轻量级的,并且可以在任何需要的地方创建。除非您实际上已经通过创建多个客户端对象来测量性能问题,否则您应该这样做。

使用错误代码返回值也不是处理C#错误的正确方法。 C#使用异常,这就是所有C#代码都应该使用的。

答案 1 :(得分:0)

我不认为为WCF使用静态服务客户端是一个很好的举措,因为我已经看到,在几乎所有实例中,它都是在需要时创建的,然后被处理掉。

如果我错了,请纠正我,但坚持服务客户是浪费资源,并为各种问题开辟机会,例如会话丢失,超时以及其他问题。通常的做法是按需创建它们,然后处理您的业务然后处理该对象。

另外,我认为ASP网站在客户端之间“实例化”,每个客户端都有自己的同一网站的单独副本。因此,您可能会遇到多个客户端尝试同时访问同一服务客户端的更多问题。