Question

En C#, si je dois ouvrir une connexion HTTP, télécharger du XML et obtenir une valeur du résultat, comment dois-je procéder ?

Par souci de cohérence, imaginez que le service Web se trouve sur www.webservice.com et que si vous lui transmettez l'argument POST fXML=1, il vous renvoie

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

J'aimerais qu'il crache "une valeur".

Était-ce utile?

La solution

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;

MODIFIER:Je viens de réaliser que vous parlez d'un service Web et pas seulement de XML simple.Dans votre solution Visual Studio, essayez de cliquer avec le bouton droit sur les 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 :"http://www.webservice.com/webservice.asmx".VS générera automatiquement toutes les aides 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);

Autres conseils

Je pense qu'il sera utile de lire ceci en premier :

Création et utilisation d'un service Web (en .NET)

Il s'agit d'une série de didacticiels expliquant comment les services Web sont utilisés dans .NET, y compris comment l'entrée XML est utilisée (désérialisation).

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

Notez que je n'ai pas eu l'occasion de tester ce code, mais cela devrait fonctionner :)

Il peut également être intéressant d'ajouter que si vous devez utiliser spécifiquement POST plutôt que SOAP, vous pouvez configurer le service Web pour recevoir des appels POST :

Consultez la page sur MSDN :Options de configuration pour les services Web XML créés à l'aide d'ASP.NET

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top