This question already has answers here:
Best Practice for WCF Service Proxy lifetime?
                                
                                    (4个答案)
                                
                        
                        
                            Reuse of WCF service clients
                                
                                    (2个答案)
                                
                        
                                6年前关闭。
            
                    
我有一个UI应用程序,其中使用了这样的WCF服务

public MainWindow()
{
    ....
    mServiceClient = new ServiceClient("EndPointTCP");
}


我应该将客户端创建为类的成员并关闭客户端并退出应用程序,还是应该在方法中需要时创建一个新客户端,然后自行关闭该客户端。

最佳答案

这完全取决于您要实现的目标。没有“最佳方法”,因为这两种方法都是可能的,良好的,并且具有不同的权衡。

持有客户对象只会浪费资源。它还可能会在调用之间泄漏上下文数据。您可能有一个错误,当单独使用mClient.Buy(100)mClient.Sell(100)时,它们会导致mClient.Buy(100); mClient.Sell(100)和正常工作,但是当与一起使用时,它们会失败。每次删除并重新创建新实例可以使您免于一个错误的困扰,但这显然不是一个好理由。

但是,每次拨打电话时都要重新创建客户端,这带来的含糊的好处是,每次都有一个新的客户端。如果您的应用程序可以在其运行时动态更改端点,则您的客户端将自动始终使用最新的地址/登录名/密码/等。

但是,不必每次都重新创建客户端对象会更快。注意这是WCF层,因此实际的基础连接可以是任何连接。如果它是具有大量设置,带有一些密钥交换,加密等的繁重协议,您可能会发现每次创建一个新客户端可能每次都创建一个新连接,这会减慢进程速度,同时保持实例的快速运行,因为连接可能保持打开状态并可以重用。通常,当您必须执行多次且经常调用该服务时,您会尝试保持连接,例如每天24小时/秒两次/秒,监视某个远程值以违反安全限制。

另一方面,您可能不希望连接持续存在。您的远程服务可能有数千个客户端和有限的资源,因此您可能希望尽快关闭连接,以便其他人可以连接。当对服务的调用很少真正执行时,通常一次只执行一次,即这样。当用户从休息时间返回后点击时。

请不要误会我的意思:以上所有只是从虚空中迷惑了一些模糊的“事实”。我不知道您的应用程序,服务或绑定(没有“端点TCP”)。最重要的因素全都在您身边,它们是您的应用程序和远程服务如何工作以及如何互操作的实际方式。如果您在乎自己的问题,则必须首先简单地研究一下您身边的话题。最佳-只需尝试两种方式,然后检查其是否有效以及其性能如何。区别将类似于2..6行代码,因此相当快。

关于c# - 使用WCF服务客户端的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19022145/

10-09 17:50
查看更多