Pergunta

Em C#, se eu precisar abrir uma conexão HTTP, baixar XML e obter um valor do resultado, como faria isso?

Para consistência, imagine que o webservice está em www.webservice.com e que se você passar o argumento POST fXML=1 ele lhe retornará

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

Eu gostaria de cuspir "algum valor".

Foi útil?

Solução

Eu uso este código e funciona muito bem:

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;

EDITAR:Acabei de perceber que você está falando de um webservice e não apenas de XML simples.Na sua solução Visual Studio, tente clicar com o botão direito em Referências no Solution Explorer e escolha "Adicionar uma referência da Web".Uma caixa de diálogo aparecerá solicitando um URL, basta colá-lo:"http://www.webservice.com/webservice.asmx".O VS irá gerar automaticamente todos os ajudantes que você precisa.Então você pode simplesmente ligar:

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);

Outras dicas

Acho que será útil ler isto primeiro:

Criando e Consumindo um Web Service (na rede)

Esta é uma série de tutoriais sobre como os serviços da Web são usados ​​no .NET, incluindo como a entrada XML é usada (desserialização).

Você pode usar algo assim:

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);                
}

Observe que não tive a chance de testar este código, mas deve funcionar :)

Também pode valer a pena acrescentar que, se você precisar usar POST especificamente em vez de SOAP, poderá configurar o serviço da Web para receber chamadas POST:

Confira a página no MSDN:Opções de configuração para serviços Web XML criados usando ASP.NET

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top