Pregunta

En C#, si necesito abrir una conexión HTTP, descargar XML y obtener un valor del resultado, ¿cómo lo haría?

Para mantener la coherencia, imagine que el servicio web está en www.webservice.com y que si le pasa el argumento POST fXML=1 le devuelve

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

Me gustaría que escupiera "algún valor".

¿Fue útil?

Solución

Utilizo este código y funciona muy bien:

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:Me acabo de dar cuenta de que estás hablando de un servicio web y no simplemente de XML.En su solución de Visual Studio, intente hacer clic derecho en Referencias en el Explorador de soluciones y elija "Agregar una referencia web".Aparecerá un cuadro de diálogo solicitando una URL, puedes simplemente pegarla en:"http://www.webservice.com/webservice.asmx".VS generará automáticamente todos los ayudantes que necesites.Entonces puedes simplemente llamar:

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

Otros consejos

Creo que será útil leer esto primero:

Crear y consumir un servicio web (en la red)

Esta es una serie de tutoriales sobre cómo se usan los servicios web en .NET, incluido cómo se usa la entrada XML (deserialización).

Puedes usar algo como eso:

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

Tenga en cuenta que no tuve la oportunidad de probar este código, pero debería funcionar :)

También puede valer la pena agregar que si necesita usar POST específicamente en lugar de SOAP, puede configurar el servicio web para recibir llamadas POST:

Consulte la página en MSDN:Opciones de configuración para servicios web XML creados con ASP.NET

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top