4

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

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

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

4

4 回答 4

5

拉迪斯拉夫和设拉子的答案都很好,我给了他们+1。

我可以添加到他们的是,通常故障通道是服务器上未处理的异常的结果。发生这种情况时,WCF 认为服务器存在根本性错误,并导致通道出现故障,使其无法使用。

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

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

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

于 2010-10-09T09:26:39.870 回答
4

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

假设它是导致问题的测试客户端。可能有2个问题:

  • 不关闭代理,因此达到与服务器的最大连接数。
  • 当代理处于失败状态时不中止代理。
于 2010-10-08T18:12:08.837 回答
3

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

于 2010-10-08T20:07:33.070 回答
0

你有没有迷上ICommunicationObject.OnFauled

于 2010-10-10T06:07:13.180 回答