2008-09-09 11 views
4

En C#, si j'ai besoin d'ouvrir une connexion HTTP, télécharger du XML et obtenir une valeur du résultat, comment ferais-je cela?Comment obtenir une valeur d'un service Web XML en C#?

Par souci de cohérence, imaginez le webservice est à www.webservice.com et que si vous passez l'argument POST FXML = 1, il vous donne de nouveau

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

Je voudrais qu'il crachait « somevalue ".

Répondre

3

J'utilise ce code et il fonctionne très 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; 

EDIT: Je viens de réaliser que vous parlez d'un webservice et pas seulement XML ordinaire. Dans votre solution Visual Studio, essayez de cliquer avec le bouton droit de la souris sur Références dans l'Explorateur de solutions et choisissez "Ajouter une référence Web". Une boîte de dialogue apparaîtra vous demandant une URL, vous pouvez simplement la coller dans: "http://www.webservice.com/webservice.asmx". VS générera tous les assistants dont vous avez besoin. Ensuite, vous pouvez simplement appeler:

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

Vous passez des paramètres via GET pas POST en tant qu'auteur demandé – aku

+0

Saisissez les informations POST d'aku et modifiez la réponse - Je n'ai pas encore de rep 2k :) –

4

Je pense qu'il sera utile de lire cette première:

Creating and Consuming a Web Service (.NET)

Ceci est une série de tutoriels sur la façon dont les services Web sont utilisés dans .NET, y compris la façon dont l'entrée XML est utilisé (désérialisation).

2

Vous pouvez utiliser quelque chose comme ça:

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

Remarque Je n'ai pas eu la chance de tester ce code, mais il devrait fonctionner :)

+0

Cela semble être une énorme quantité de travail et de frais généraux pour un service Web ?! –

+0

Rob, le service Web n'est pas toujours une qualité WSDL \ SOAP. Parfois, vous devez obtenir et analyser les données du serveur vous-même. Une chose étrange à propos de cette question est une méthode POST. Habituellement, ces services simples utilisent GET. – aku

Questions connexes