检查WCF通信信道状态的正确方法

时间:2015-08-31 15:03:41

标签: c# wcf state fault

我正在开发一个WCF客户端/服务器解决方案,我需要24/7全天候提供通信通道,因为有一个不断发布数据的Windows服务 - 我的WF实现是一个订阅/发布服务。我把一些东西放在一起,但似乎有问题失去联系和一些其他邪恶的问题。 正如我在Microsoft网站上阅读有关检查通信对象的内容,检查ICommunicationObject.State属性的值是竞争条件,不建议确定是重用还是关闭通道。 然而,我看到的所有例子都使用这种技术! Microsoft制作了这种符号,但没有提供有关如何“正确”执行此操作的更多信息或建议。

所以我想知道这样做的正确方法是什么 - 那些有相关经验的人请在我学习WCF时帮助我 - 我可以使用关于如何做的好的提示。

1 个答案:

答案 0 :(得分:0)

  

所以我想知道这样做的正确方法是什么

嗯,竞争条件是一种竞争条件 - 他们不可能在事实之前赶上,因为他们还没有完成任务。因此,您在调用之前能够了解频道状态的期望是不合理的。

但是,我们知道如果频道不处于故障(或关闭)状态,我们应该始终能够重复使用该频道。所以我们可以在try ... catch中将我们的调用封装到通道,然后将异常处理为appropriate

如果频道不可重复使用,那么这实际上是一个需要在事后处理的错误情况。在工作流程中,您通常可以将其实现为compensation机制,可能是通过创建另一个通道然后调用它。