【问题标题】:Static WCF service client object or standard WCF service client object?静态 WCF 服务客户端对象还是标准 WCF 服务客户端对象?
【发布时间】:2025-11-25 22:50:01
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    WCF 客户端是轻量级的,可以在需要的地方创建。除非您实际测量了创建多个客户端对象的性能问题,否则您应该这样做。

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

    【讨论】:

    • 但是我想知道在性能方面哪个更有效?为不同的用户使用相同的静态客户端或不同的对象?您的建议是什么,对于有多个并发用户的网站,我最终应该使用什么?
    【解决方案2】:

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

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

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

    【讨论】:

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