WCF:如何诊断故障 channel ?

标签 wcf debugging diagnostics channelfactory duplex-channel

我正在为我的实验室进行更改,希望能帮助诊断我们看到的一些奇怪的 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/

相关文章:

java - Eclipse - 显示完整的调用堆栈(比如当它在调试器中遇到断点时)而不放置断点?

asp.net - 记录加载缓慢的页面

c# - 将 json 参数传递给 wcf rest 服务 post 方法

c# - 如何在 SendMailAsync 方法中捕获异常

wcf - 如何将 SAML 身份验证集成到 WCF Web 服务应用程序中

c++ - 是否有可能确保复制省略?

wcf - 为什么使用 NetMessagingBinding 监听 Azure 服务总线队列的服务可能会停止接收消息?

java - 调试改造错误消息的最佳方法

debugging - 在 Intellij 调试器断点中使用多个条件