Я успешно работаю с сторонним мыльным сервисом. Я добавил сервисную ссылку на мыльную веб-службу, которая автоматически генерировала классы.Извлечение детали из WCF FaultException response
При возникновении ошибки она возвращает ответ мыло, как это:
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring xsi:type="xsd:string">Error while reading parameters of method 'Demo'</faultstring>
<detail xsi:type="xsd:string">Invalid login or password. Connection denied.</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
я могу поймать ошибку, но не извлечь деталь. Я попытался следующий код:
catch (FaultException ex)
{
MessageFault msgFault = ex.CreateMessageFault();
var elm = msgFault.GetDetail<string>();
//throw Detail
}
Однако это ошибки с следующий как подробно узел не является объектом:
Expecting element 'string' from namespace 'http://schemas.datacontract.org/2004/07/MyDemoNamespace'.. Encountered 'Text' with name '', namespace ''.
Это партия API третьего, так что я не могу изменить ответ.
Все еще есть проблема, когда ответ содержит угловые скобки [] – John
Решила мою проблему отлично! – eouw0o83hf
этот код, если деталь не является строкой, в порядке: MessageFault msgFault = ex.CreateMessageFault(); XmlReader readerAtDetailContents = msgFault.GetReaderAtDetailContents(); var readOuterXml = readerAtDetailContents.ReadOuterXml(); var data = XElement.Parse (readOuterXml); Словарь element = data.Elements() .ToDictionary (elementKey => elementKey.Name.LocalName, elementVal => elementVal.Value, null); –
Jerome2606