/ / Come ottengo un valore da un servizio Web XML in C #? - c #, xml, servizi web

Come posso ottenere un valore da un servizio Web XML in C #? - c #, xml, servizi web

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

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

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

Mi piacerebbe sputare "somevalue".

risposte:

3 per risposta № 1

Io uso questo codice e funziona alla grande:

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 webservice e non solo di un semplice XML. Nella tua soluzione di Visual Studio prova a fare clic con il tasto destro su References in Solution Explorer e scegli "Aggiungi un riferimento Web". Apparirà una finestra di dialogo che richiede un URL, puoi basta incollarlo in: "http://www.webservice.com/webservice.asmx"VS invierà automaticamente tutti gli helper necessari. Quindi 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);

4 per risposta № 2

Penso che sarà utile leggere prima questo:

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

Questa è una serie di tutorial su come i servizi Web vengono utilizzati in .NET, incluso come viene utilizzato l'input XML (deserializzazione).


2 per risposta № 3

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


0 per risposta № 4

Potrebbe anche essere utile aggiungere che se è necessario utilizzare in modo specifico POST anziché SOAP, è possibile configurare il servizio Web per ricevere le chiamate POST:

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