2

在典型的客户端服务应用程序中,服务是 WCF,如何使用服务引用?

例如,您是为每个调用单独实例化服务,还是打开一个并在客户端应用程序的整个生命周期中保留它?(当我提到“实例化服务”时,我的意思是实例化由 svcutil 创建的服务对象)

现在我们在客户端使用了一个服务实例,因为这似乎比每次调用都创建、打开和关闭服务要快,但是现在我徘徊是否可以?这种方法的主要问题是发生超时(或者我们必须打开会话 10 小时)、连接中断等,我们总是必须通过通道执行“IsAlive”以确保一切正常......

如果它有任何相关性,则该应用程序是单线程的,并且身份验证是自定义构建的(通过将身份验证令牌插入标头)。绑定是basicHttp(或ws,对于这种情况并不重要)。

4

1 回答 1

1

就我个人而言,我更喜欢保持通道打开直到方法调用返回,然后关闭它以释放资源。这是最干净的方法。每次初始化代理实例只需要几毫秒,从不影响我的性能目标。

拥有某种 ServiceClient 单例是一个有趣的想法,但正如你所说,它有很多副作用,所以我不确定这是一个聪明的方法,但由于你的应用程序是单线程的,所以它不应该是一个大的问题,您可能会获得一些轻微的性能优势。

如果节省毫秒是关键任务,那么您还可以拥有一个可以从中获取实例的 ServiceClient 池。

但是,第一种方法是最干净的。复杂性不好。

于 2011-01-13T23:37:21.243 回答