Domanda

In C#, se devo aprire una connessione HTTP, scaricare XML e ottenere un valore dal risultato, come potrei farlo?

Per coerenza, immagina che il servizio web sia su www.webservice.com e che se gli passi l'argomento POST fXML=1 ti restituisce

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

Mi piacerebbe che sputasse fuori "qualche valore".

È stato utile?

Soluzione

Io uso questo codice e funziona benissimo:

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;

MODIFICARE:Ho appena realizzato che stai parlando di un servizio web e non solo di un semplice XML.Nella soluzione Visual Studio, prova a fare clic con il pulsante destro del mouse su Riferimenti in Esplora soluzioni e scegli "Aggiungi un riferimento Web".Apparirà una finestra di dialogo che richiede un URL, puoi semplicemente incollarlo:"http://www.webservice.com/webservice.asmx".VS genererà automaticamente tutti gli aiutanti di cui hai bisogno.Allora puoi semplicemente chiamare:

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

Altri suggerimenti

Penso che sarà utile leggere prima questo:

Creazione e consumo di un servizio Web (in .NET)

Si tratta di una serie di esercitazioni su come vengono utilizzati i servizi Web in .NET, incluso il modo in cui viene utilizzato l'input XML (deserializzazione).

Puoi usare qualcosa del genere:

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

Nota: non ho avuto la possibilità di testare questo codice, ma dovrebbe funzionare :)

Potrebbe anche valere la pena aggiungere che se è necessario utilizzare specificamente POST anziché SOAP, è possibile configurare il servizio Web per ricevere chiamate POST:

Consulta la pagina su MSDN:Opzioni di configurazione per servizi Web XML creati utilizzando ASP.NET

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top