2010-01-03 81 views
7

我有一个WCF服务和客户端。我经由检查WCF连接

ChannelFactoryBase <连接到WCF(中 <(TChannel>)>).. ::。CreateChannel 方法

然后,我有一个参考ICommunicationObject

WCF服务连接或稍后关闭时可能不起作用。什么是正确的 方法来检查WCF服务是否正在工作。一种直接的方法是使用CommunicationException机制。但是ICommunicationObject.State属性呢?我应该在任何WCF方法调用之前检查它是否为 处于故障状态?什么是最佳做法?

+0

从用户@Stix,每[MSDN](https://msdn.microsoft.com/en-us/library/ms733912(V = vs.110)的.aspx):检查ICommunicationObject.State属性的值是一种竞争条件,不建议确定是重用还是关闭频道。 – 2015-09-29 19:59:47

回答

13

没有什么神奇的方法来检查WCF服务是否工作 - 除了调用它,并正在准备处理中产生的,如果它不工作异常。

ICommunicationObject.State只会告诉你,客户端和服务器之间的通道是“故障”的,如果以前的操作导致错误并且错误在服务器上没有正确处理(并且因此通道“出现故障“,例如变得无用)。

你可以 - 如果你控制线的两端 - 包括一个“虚拟”的ping方法(或类似返回服务的版本号),以便能够先调用类似的东西,所以只要看看沟通渠道依然活着。

但后来:什么是第一次调用MyService.Ping()和必须处理可能出现的异常,如果服务不活的,然后调用您的实际方法,而不是只调用MyService.MyMethod()并处理任何相关的异常真正受益?

+0

谢谢, 我不知道为什么有ICommunicationObject.Faulted事件 和ICommunicationObject.State财产?如果我能以某种方式使用它们 – 2010-01-03 16:58:14

+0

可以处理“故障”事件,以便马上通知有故障的信道,例如,例如,您可以重新创建代理。国家不仅仅是“Faulted”状态,但它并没有提供服务是否“活着”的暗示。 – 2010-01-03 20:53:06

+1

如何调用Proxy.Open()? – 2013-04-28 10:13:17