<分区>
我有一个 UI 应用程序,我在其中使用这样的 WCF 服务
public MainWindow()
{
....
mServiceClient = new ServiceClient("EndPointTCP");
}
我应该将客户端创建为类的成员并在我的应用程序退出时关闭客户端,还是应该在方法需要时创建一个新客户端并自行关闭。
<分区>
我有一个 UI 应用程序,我在其中使用这样的 WCF 服务
public MainWindow()
{
....
mServiceClient = new ServiceClient("EndPointTCP");
}
我应该将客户端创建为类的成员并在我的应用程序退出时关闭客户端,还是应该在方法需要时创建一个新客户端并自行关闭。
最佳答案
这完全取决于您想要实现的目标。没有“最好的方法”,因为这两种方法都是可能的、好的,并且有不同的权衡。
持有客户端对象只会浪费资源。它还可能会在调用之间泄漏上下文数据。您可能有一个错误会导致 mClient.Buy(100)
和 mClient.Sell(100)
单独使用时可以正常工作,但一起使用时会失败 mClient.Buy(100); mClient.Sell(100)
。每次删除并重新创建新实例可以使您避免那个错误,但显然这不是一个好的论据。
每次调用时重新创建客户端有一个模糊的好处......每次都有一个新的客户端。如果您的应用程序有可能在应用程序运行时动态更改端点,那么您的客户端将自动始终使用最新的地址/登录名/密码/等。
但是,不每次都重新创建客户端对象会更快。请注意它是 WCF 层,因此实际的底层连接可以是任何连接。如果它是一些带有大量 key 交换、加密等设置的协议(protocol),你可能会发现每次创建一个新客户端可能每次都会创建一个新连接并且它会减慢一切,同时保持实例将运行得非常快,因为连接可能会保持打开状态并重新使用。当您必须执行许多且经常调用服务时,您通常会尝试保持连接,例如 24 小时/天两次/秒监视某个远程值是否违反安全限制。
另一方面,您可能不希望这种联系持续下去。您的远程服务可能有数以千计的客户端和有限的资源,因此您可能希望尽快关闭连接以便其他人可以连接。当对服务的调用真的很少完成时,通常你会这样做,一次只有一次,即。当用户从茶歇回来后点击时。
请不要误会我的意思:以上只是从虚无中变出一些模糊的“事实”。我不知道你的应用程序,也不知道你的服务,也不知道你的绑定(bind)(没有“端点 TCP”)。最重要的因素都在你这边,它们以你的应用程序和远程服务如何工作和互操作的实际方式存在。如果你关心你问的是什么,你必须先简单地研究一下你这边的话题。最好 - 简单地尝试两种方法并检查它是否有效以及它的性能如何。区别大约是 2..6 行代码,所以,嗯,相当快。
关于c# - WCF 服务客户端的正确使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022145/