检查WCF连接

8
我有一个WCF服务和客户端。我通过ChannelFactoryBase<(Of <(TChannel>)> )..::.CreateChannel 方法连接WCF。
然后我有一个对ICommunicationObject的引用。
当连接WCF时,服务可能无法工作或稍后关闭。检查WCF服务是否正常工作的正确方法是什么?一种直接的方法是使用CommunicationException机制。但是, 我是否应该在任何WCF方法调用之前检查ICommunicationObject.State 属性是否处于故障状态?最佳实践是什么?

来自用户@Stix,根据MSDN:检查ICommunicationObject.State属性的值是一种竞争条件,并且不建议用于确定是否重用或关闭通道。 - Kirk Broadhurst
1个回答

15

除了调用WCF服务并准备好处理异常,没有什么神奇的方法可以检查它是否正常工作。

ICommunicationObject.State只会告诉你客户端和服务器之间的通道是否“失效”,如果先前的操作导致错误,并且该错误在服务器上没有得到适当处理(因此通道被“失效”,例如变得无用)。

如果您控制电线的两端,则可以包括一个“虚假”的ping方法(或类似返回服务版本号的内容),以便首先调用此类方法,从而看到通信通道是否仍然处于活动状态。

但问题是:首先调用MyService.Ping()并准备处理可能的异常,以确定服务是否存活,然后再调用实际方法,与直接调用MyService.MyMethod()并处理任何相关异常有何真正的好处?


我想知道为什么会有ICommunicationObject.Faulted事件和ICommunicationObject.State属性?如果可以用它们做些什么。谢谢。 - Captain Comic
“Faulted”事件可被处理以立即通知频道出现故障,例如,您可以重新创建代理。状态不仅具有“Faulted”状态,但它并没有提供任何提示服务是否“活着”。 - marc_s
1
调用Proxy.Open()怎么样? - Uri Abramson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接