我正在为我的实验室进行更改,希望能帮助诊断我们看到的一些奇怪的 channel 故障怪异。有一个测试应用程序使用 DuplexChannelFactory 连接到几个 Windows 服务,由于某种原因,这个测试应用程序上的 channel 似乎有很多错误。我计划在那里实现一些重试逻辑,但最好弄清楚它们究竟为什么会出错。
我知道 channel 工厂和代理对象都实现了很多接口(interface),我已经使用反射器爬过其中的一些,但是我没有找到任何像我要找的东西。有没有办法在这些对象出现故障后查询这些对象,以获取有关导致故障的原因的一些信息?
编辑:配置非常基本——绑定(bind)只是默认构造的 NetTcpBinding,服务实现有 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)]
,并且服务契约(Contract)中的任何操作都没有特殊属性。但是,我更多地询问诊断 channel 故障的一般技术,而不是诊断这种特定情况。我不希望配置细节对此产生太大影响。如果有的话,配置详细信息将是所述诊断返回的内容,对吗?
最佳答案
拉迪斯拉夫和设拉子的答案都很好,我给了他们+1。
我所能补充的是,通常故障 channel 是 的结果。未处理的异常 在服务器上。发生这种情况时,WCF 认为服务器存在根本性错误,并导致 channel 出现故障,使其无法使用。
正确的方法——我认为它应该是默认的并且是免费的——是让服务捕获异常并创建一个 FaultException 并返回它(查看这个表单示例 http://www.c-sharpcorner.com/UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx)
WCF 不作为默认设置的原因是它更改了契约(Contract)和 WSDL,因此客户端必须获取更新的 WSDL。
所以如果我是你,我会捕获异常,记录它们,然后返回一个错误异常,这样我就知道问题出在哪里并且 channel 没有错误。
关于WCF:如何诊断故障 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892527/