Получить строки из сообщения SOAP в C # - PullRequest
0 голосов
/ 11 декабря 2018

Как я могу разобрать определенные части из сообщения SOAP и получить их значения?

Например, если ответное сообщение мыла таково:

      <?xml version="1.0" encoding="utf-8"?>
 <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
   <soap12:Body>
     <GetCountryListResponse xmlns="http://example.org/">
       <GetCountryListResult>
         <string>string</string>
         <string>string</string>
       </GetCountryListResult>
     </GetCountryListResponse>
   </soap12:Body>
 </soap12:Envelope>

Я хочу получить GetCountryListResultзначение и сохраните его в строковую переменную.

Я нашел хороший ответ в Java на этот вопрос:

Получить строки из сообщения SOAP в Java

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

В этом примере будет прочитан ваш xml из файла и найден список строк сборки, но вы можете получить и понять, как его можно проанализировать.

using (FileStream fs = new FileStream(@"c:\temp\soap.xml", FileMode.Open))
{
    var sr = new StreamReader(fs);
    var str = sr.ReadToEnd();
    XmlDocument document = new XmlDocument();
    document.LoadXml(str);

    XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
    manager.AddNamespace("soap12", "http://www.w3.org/2003/05/soap-envelope");
    manager.AddNamespace("", "http://example.org/");
    XmlNodeList xnList = document.SelectNodes("//soap12:Envelope/soap12:Body/GetCountryListResponse/GetCountryListResult", manager);
    if (xnList.Count == 0) return;

    XmlNode countryListResult = xnList[0];
    List<string> result = new List<string>();
    foreach (XmlNode childNode in countryListResult.ChildNodes)
    {
        result.Add(childNode.FirstChild.Value);
    }
}

Вам также потребуется добавить обработку ошибок.

0 голосов
/ 11 декабря 2018

var service = new WebService ();var result = service.Invoke (soapAction, метод, параметры);

XNamespace nsSoap = "http://www.w3.org/2003/05/soap-envelope";
XNamespace ns = "link-to-namespace";

// Look for the "Fault" element in the response. If present, there was an error.
var fault = result.Root.Element("{" + nsSoap + "}Body").Element("{" + ns_soap + "}Fault");
if (error != null)
{
    var codeWithNs = error.Element("{" + nsSoap + "}Code").Element("{" + ns_soap + "}Value").Value;
    var codeSplit = codeWithNs.Split(':');
    var code = codeSplit.Length == 2 ? codeSplit[1] : codeSplit[0];
    if (code == "InvalidUsernameOrPassword")
    {
        throw new InvalidUsernameOrPasswordException();
    }
    else
    {
        throw new Exception("Something went wrong.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...