Доступ к деталям ServiceModel.FaultException в службе WCF - PullRequest
2 голосов
/ 30 марта 2012

Как вы перехватываете / получаете доступ к информации в узле soapenv: Detail, когда вызов службы WCF возвращает ошибку ??

Только при отлове FaultException оно не включается, но я вижу данные в службежурнал трассировки.

Решение / Обходной путь:

        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)

Что было бы неплохо...

1 Ответ

1 голос
/ 30 марта 2012

Вы можете поймать его, но вы должны указать тип, используемый для детали, вместо XElement.

Catch ex As FaultException(Of MyFaultDetails) 

Тип для этой детали должен был автоматически генерироваться Visual Studio, если вы используете«Добавить веб-ссылку», и это служба WCF.

Затем вы можете использовать:

ex.Detail

для доступа к деталям через свойства.

Редактировать: Убедитесь, что методы вашего веб-сервиса снабжены атрибутом FaultContract:

<FaultContract(GetType(MyFaultDetails))>_ 
...