我正在为我的实验室进行改变运输,希望有助于诊断我们所看到的一些奇怪的通道错误。有一个测试应用程序使用DuplexChannelFactory连接到几个Windows服务,由于某种原因,这个测试应用程序上的通道似乎有很多错误。我计划在那里实现一些重试逻辑,但是弄清楚为什么它们是错误的将是很好的。
我知道频道工厂和代理对象都实现了很多接口,我使用反射器来抓取其中的一些,但我找不到任何类似于我正在寻找的内容。有没有办法在它们出现故障后查询这些对象,以获得有关导致故障的原因的一些信息?
编辑:配置非常基础 - 绑定只是默认构造的NetTcpBinding,服务实现有[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)]
,服务合同中的任何操作都没有特殊属性。但是,我要求更多关于诊断通道故障的一般技术,而不是诊断这个特定情况。我不希望配置细节对此产生太大影响;如果有的话,配置细节将由所述诊断返回,对吧?
答案 0 :(得分:4)
Ladislav和Shiraz的答案都很好,我给了他们+1。
我可以添加的是,通常故障通道是服务器上未处理异常的结果。当发生这种情况时,WCF认为服务器存在一些根本性的错误并且使通道出现故障,因此无法使用它。
正确的方法 - 我认为应该是默认的并且是免费的 - 是服务捕获异常并创建FaultException并返回它(看看这个表单示例http://www.c-sharpcorner.com/UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx)
WCF没有默认的原因是它更改了合同和WSDL,因此客户端必须获取更新的WSDL。
所以,如果我是你,我会抓住异常,记录它们然后返回一个错误异常,这样我就会知道问题所在并且通道没有出现故障。
答案 1 :(得分:3)
首先是这个测试应用程序,或者是其他客户使用的特定服务。
假设是测试客户端导致问题。可能有两个问题:
答案 2 :(得分:2)
您正在寻找的诊断工具称为WCF Tracing。它通常表明频道出现故障的原因。您可以在客户端和服务器上配置它,并使用SvcTraceViewer.exe浏览收集的跟踪。
答案 3 :(得分:0)