Как получить значение из веб-службы XML на C#?

StackOverflow https://stackoverflow.com/questions/51129

  •  09-06-2019
  •  | 
  •  

Вопрос

В C#, если мне нужно открыть HTTP-соединение, загрузить XML и получить одно значение из результата, как мне это сделать?

Для последовательности представьте, что веб-сервис находится по адресу www.webservice.com, и если вы передадите ему аргумент POST fXML=1, он вернет вам результат.

<xml><somekey>somevalue</somekey></xml>

Я бы хотел, чтобы это выплеснуло «какое-то значение».

Это было полезно?

Решение

Я использую этот код, и он отлично работает:

System.Xml.XmlDocument xd = new System.Xml.XmlDocument;
xd.Load("http://www.webservice.com/webservice?fXML=1");
string xPath = "/xml/somekey";
// this node's inner text contains "somevalue"
return xd.SelectSingleNode(xPath).InnerText;

РЕДАКТИРОВАТЬ:Я только что понял, что вы говорите о веб-сервисе, а не просто о простом XML.В своем решении Visual Studio попробуйте щелкнуть правой кнопкой мыши «Ссылки» в обозревателе решений и выбрать «Добавить веб-ссылку».Появится диалоговое окно с запросом URL-адреса, вы можете просто вставить его:"http://www.webservice.com/webservice.asmx".VS автоматически сгенерирует всех необходимых вам помощников.Тогда вы можете просто позвонить:

com.webservice.www.WebService ws = new com.webservice.www.WebService();
// this assumes your web method takes in the fXML as an integer attribute
return ws.SomeWebMethod(1);

Другие советы

Думаю, будет полезно сначала прочитать вот это:

Создание и использование веб-службы (в .NET)

Это серия руководств по использованию веб-сервисов в .NET, включая использование входных данных XML (десериализация).

Вы можете использовать что-то вроде этого:

var client = new WebClient();
var response = client.UploadValues("www.webservice.com", "POST", new NameValueCollection {{"fXML", "1"}});
using (var reader = new StringReader(Encoding.UTF8.GetString(response)))
{
    var xml = XElement.Load(reader);
    var value = xml.Element("somekey").Value;
    Console.WriteLine("Some value: " + value);                
}

Обратите внимание: у меня не было возможности протестировать этот код, но он должен работать :)

Возможно, также стоит добавить, что если вам нужно использовать именно POST, а не SOAP, вы можете настроить веб-службу для приема вызовов POST:

Посетите страницу в MSDN:Параметры конфигурации для веб-служб XML, созданных с использованием ASP.NET

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top