2013-11-15 72 views
0

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

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

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

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

回答

2

WCF客户端旨在轻量化,并在需要时创建。除非您实际测量了创建多个客户端对象时的性能问题,否则应该这样做。

还使用错误代码返回值是不正确的方式来处理C#中的错误。 C#使用异常,这就是所有C#代码应该更喜欢使用的。

+0

但是我想知道哪些在性能方面更高效?对不同的用户使用相同的静态客户端或不同的对象?你的建议是什么?我最终应该使用多个并发用户的网站? –

0

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

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

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

+0

不,ASP网站不是“实例化”每个客户端。只有一个网站。可能不同的是,服务器启动多个线程(或同一进程的多个实例)来处理每个传入的请求,但网站的内容是相同的。 –