2012-03-29 66 views
1

当WCF服务调用返回错误时,如何捕获/访问soapenv中的信息:Detail节点?在WCF服务中访问ServiceModel.FaultException细节

单独捕获FaultException不包含它bu我可以看到服务跟踪日志中的数据。

解决方案/解决方法:

 Catch ex As FaultException 
     Dim detailsMsg As String = String.Empty 
     Dim mf As MessageFault = ex.CreateMessageFault 
     If mf.HasDetail Then 
      Dim ns As XNamespace = "http://url" 
      Dim detailedMessage As XElement = mf.GetDetail(Of XElement)() 
      Dim messageElement As XElement = detailedMessage.Descendants(ns + "Message").SingleOrDefault 
      If messageElement IsNot Nothing Then 
       detailsMsg = messageElement.Value 
      End If 
     End If 
     End Try 

仍然不能赶上同:

Catch ex As FaultException(Of XElement) 

这本来是很高兴......

回答

0

你可以捕捉它,但你必须指定用于细节的类型而不是XElement

Catch ex As FaultException(Of MyFaultDetails) 

类型为这个细节应该已经自动由Visual Studio如果使用“添加Web引用”生成的,这是一个WCF服务。

然后,您可以使用:

ex.Detail 

通过属性访问的细节。

编辑:确保您的Web服务方法与FaultContract属性来修饰:

<FaultContract(GetType(MyFaultDetails))>_ 
+0

这是我第一次尝试,但它不会去追,我可以看到对象的XML表示回复但不能使用wsdl生成的对象来捕获细节。命名空间对此有什么影响?它与文档的其余部分不同。 – baileyswalk 2012-04-04 15:41:25

+0

是否将FaultContract属性放在Web服务方法中? (检查我的编辑) – aKzenT 2012-04-04 21:28:46

+0

服务是外部的我只参考它,我可以检查这个客户端? – baileyswalk 2012-04-13 11:16:15