L’utilisation des services web dans Visual Studio est très simple. Il suffit d’« Ajouter une référence de service… » dans l’explorateur de solutions.

Vous pouvez également utiliser WCF pour accéder à des services web. L’utilisation de WCF est peut-être moins intuitive que la première méthode mais nous pouvons faire un petit rappel en prenant comme exemple le service web Amazon.

Le but de cet exemple est d’accéder à un service web existant avec WCF. Ce service web est AWSECommerceSerice qui pour faire simple vous permet de faire de l’e-commerce (présenter à vos clients les articles choisis sur votre site web, voir les images, les commentaires des acheteurs, etc.).

Notre application cliente avant de pouvoir exploiter notre service web, doit tout d’abord connaître les contrats qui correspondent au service auquel on doit accéder. La meilleure approche consiste à utiliser l’outil SvcUtil.exe. Cet outil est capable de récupérer les contrats, de générer le code proxy client permettant la manipulation du service WCF et de générer le fichier de configuration client :

svcutil http://ecs.amazonaws.com/AWSECommerceService/2009-02-01/FR/AWSECommerceService.wsdl /out:c:\proxy.cs /config:c:\app.config

Ensuite, pour tester tout ça, il vous suffit:

  • de créer un nouveau projet de type console.
  • d’ajouter une référence vers System.ServiceModel.dll.
  • d’importer dans le projet la classe générée proxy ainsi que le fichier de configuration.

Si on analyse le fichier de configuration généré dans la section « client », vous avez l’adresse du service web où se connecte la classe proxy :

<client>

   <endpoint address="http://soap.amazon.fr/onca/soap?Service=AWSECommerceService"

                binding="basicHttpBinding" bindingConfiguration="AWSECommerceServiceBinding"

                contract="AWSECommerceServicePortType" name="AWSECommerceServicePort" />

</client>

Le code permettant d’afficher une liste des livres concernant WCF sur Amazon est tout aussi simple :

AWSECommerceServicePortTypeClient client = new AWSECommerceServicePortTypeClient();

try
{
// permet de parcourir les articles dans amazon
ItemSearch srch = new ItemSearch();
srch.AssociateTag = "Marecherche";
// la clé qui vous avez obtenu en vous inscrivant sur le portail de développeurs AWS
// elle vous permet de vous connecter au web service Amazon
srch.AWSAccessKeyId = "xxxxxxxxxxx";


ItemSearchRequest req = new ItemSearchRequest();
// définition des mots clés. On cherche tous ce qui concèrne WCF
req.Keywords = "WCF";
// définition de l'index à partir duquel nous souhaitons récupérer le résultat de notre recherche
// ce qui nous intéresse ici ce sont des livres
req.SearchIndex = "Books";
// envoyer notre requête
srch.Request = new ItemSearchRequest[1] { req };
// récupérer les résultats
ItemSearchResponse resp = client.ItemSearch(srch);
if (null != resp)
{
Items info = resp.Items[0];
Item[] items = info.Item;

// parcourir et afficher nos résultats
for (int i = 0; i < items.Length; i++)
{
Item item = itemsIdea;
Console.WriteLine("Titre du livre: " + item.ItemAttributes.Title);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

Console.ReadLine();

Si vous ne voulez pas passer par le fichier de configuration, vous pouvez aussi utiliser un autre constructeur de la classe proxy et passer tous ces paramètres par ce biais. Voici un exemple :

BasicHttpBinding httpBinding = new BasicHttpBinding();
httpBinding.Name = "AWSECommerceServiceBinding";
BasicHttpSecurity security = httpBinding.Security;
security.Mode = BasicHttpSecurityMode.None;

EndpointAddress adresse = new EndpointAddress("http://soap.amazon.com/onca/soap?Service=AWSECommerceService");
AWSECommerceServicePortTypeClient client = new AWSECommerceServicePortTypeClient(httpBinding, adresse);

Après avoir exécuté ce code, le résultat est le suivant :

WCF

Référence pour les développeurs sur les services web Amazon se trouve ici : http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html.

A bientôt ;)