这完全取决于您想要实现的目标。没有“最好的方法”,因为这两种方法都是可能的、好的,并且有不同的权衡。
持有客户端对象只会浪费资源。它还可能在调用之间泄漏上下文数据。您可能有一个错误,它在单独使用时会导致mClient.Buy(100)
并mClient.Sell(100)
正常工作,但在一起使用时会失败mClient.Buy(100); mClient.Sell(100)
。每次删除并重新创建新实例可以使您免于该错误,但显然这不是一个好的论据。
每次拨打电话时重新创建客户都有一个模糊的好处……每次都有一个新客户。如果您的应用程序有可能在应用程序运行时动态更改端点,那么您的客户端将自动始终使用最新的地址/登录名/密码/等。
但是,不每次都重新创建客户端对象会更快。请注意,它是 WCF 层,因此实际的底层连接可以是任意的。如果它是一些带有一些密钥交换、加密等的繁重设置的协议,你可能会发现每次创建一个新客户端都可能每次都创建一个新连接,它会减慢一切,同时保持实例的工作速度非常快,因为连接可能会保持打开和重用。当您必须对服务执行多次且经常调用时,您通常会尝试保持连接,例如 24 小时/天两次/秒监控某些远程值是否违反安全限制。
另一方面,您可能不希望这种联系持续存在。您的远程服务可能有数千个客户端和有限的资源,因此您可能希望尽快关闭连接,以便其他人可以连接。当对服务的调用真的很少完成时,通常你会这样做,一次只有一次,即。当用户从咖啡休息时间返回后点击。
请不要误会我的意思:以上只是从虚无中变出一些模糊的“事实”。我不知道您的应用程序、服务和绑定(没有“端点 TCP”)。最重要的因素都在您身边,它们以您的应用程序和远程服务如何工作和互操作的实际方式存在。如果您关心您的要求,您必须首先简单地研究您身边的主题。最好 - 只需尝试两种方式并检查它是否有效以及它的性能如何。区别大概是 2..6 行代码,所以,嗯,相当快。