【问题标题】:WCF: How to diagnose faulted channels?WCF:如何诊断故障通道?
【发布时间】:2010-10-08 16:33:48
【问题描述】:

我正在为我的实验室进行更改,希望能帮助诊断我们所看到的一些奇怪的通道故障异常。有一个测试应用程序使用 DuplexChannelFactory 连接到几个 Windows 服务,由于某种原因,这个测试应用程序上的通道似乎有很多错误。我计划在那里实现一些重试逻辑,但如果能弄清楚它们究竟为什么会出错,那就太好了。

我知道通道工厂和代理对象都实现了很多接口,并且我已经使用反射器爬过其中的一些,但是我没有找到任何我想要的东西。有没有办法在这些对象出现故障后查询这些对象以获取有关导致故障的原因的一些信息?

编辑:配置非常基本——绑定只是默认构造的 NetTcpBinding,服务实现有[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)],服务合约中的任何操作都没有特殊属性。但是,我更多地询问诊断通道故障的一般技术,而不是诊断这种特定情况。我不希望配置细节对此产生太大影响。如果有的话,配置详细信息将是所述诊断返回的内容,对吗?

【问题讨论】:

  • 我认为您的信息还不够。提及正在使用的协议(绑定配置很有帮助),一个服务的示例,客户端的创建方式,...
  • 感谢更新,我会尽快回复您。

标签: wcf debugging diagnostics channelfactory duplex-channel


【解决方案1】:

Ladislav 和 Shiraz 的答案都很好,我给了他们 +1。

我所能补充的是,通常故障通道是服务器上未处理的异常的结果。发生这种情况时,WCF 认为服务器存在根本性问题,并导致通道出现故障,使其无法使用。

正确的方法——我认为它应该是默认的并且是免费的——是让服务捕获异常并创建一个 FaultException 并返回它(查看这个表单示例http://www.c-sharpcorner.com/UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx

WCF 不作为默认设置的原因是它更改了合同和 WSDL,因此客户端必须获取更新后的 WSDL。

所以如果我是你,我会捕获异常,记录它们,然后返回错误异常,这样我就可以知道问题出在哪里并且通道没有错误。

【讨论】:

    【解决方案2】:

    首先是这个测试应用程序,还是其他客户端使用的特定服务。

    假设是测试客户端导致了问题。可能有两个问题:

    • 不关闭代理,因此达到与服务器的最大连接数。
    • 在代理处于故障状态时不会中止它们。

    【讨论】:

    • 通道故障最可能的原因是服务器端异常。
    【解决方案3】:

    您正在寻找的诊断工具称为WCF Tracing。它通常显示通道发生故障的原因。您可以在客户端和服务器上配置它,并使用SvcTraceViewer.exe 浏览收集的痕迹。

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 我有,但我可以发誓我这辈子什么都做不了。即使通道在服务器端故意出现故障,客户端也不会发生任何事情。似乎不是很有用。我假设我缺少一些配置细节以使其工作或其他东西。
      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2010-12-06
      相关资源
      最近更新 更多