Как получить значение из веб-службы XML на C#?
-
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