mardi 17 avril 2012

Client WCF asynchrone


Pour réaliser des clients Wcf asynchrone, il existe de nombreuses solutions. Cela peut se faire via la génération automatique du client via le ServiceModel Metadata Utility Tool (Svcutil.exe) ou via l'outil fourni avec visual studio comme montré ci dessous.

Génération d'un client Wcf avec Visual Studio 2010

Le problème de ces 2 solutions, c'est que le client généré n'est pas directement lié à l'interface du service (le contrat)
Il est possible de réaliser son propre client asynchrone en héritant de la classe ClientBase ou en utilisant un contrat de services proposant des méthodes asynchrones (ce qui demande de les développer manuellement)

Une autre solution que je trouve fort sympathique est d'utiliser le WCF Facility fourni avec la librairie Castle Windsor. Cette solution permet, à partir d'un contrat non asynchrone de créer dynamiquement un client asynchrone.

Pour ce faire, il suffit d'enregistrer le proxy dans un container et définir le contrat qu'il implémente lors de l'enregistrement:

Il est nécessaire d'ajouter le Wcf Facility dans les facilities Castle pour activer la fonctionnalité
Ensuite, il suffit de récupérer l'objet dans le container et d'appeler la fonction BeginWcfCall :

BeginWcfCall prend en paramètre une fonction de callback. la signature de cette fonction est la suivante :
Ainsi, vous pouvez avoir rapidement un proxy Wcf asynchrone en quelques lignes.

La fonction BeginWcfCall est une extension méthode il est donc nécessaire d'inclure le namespace Castle.Facilities.WcfIntegration.Async dans les usings du code.

Sources:
  • http://msdn.microsoft.com/en-us/library/ms730059.aspx
  • http://msdn.microsoft.com/en-us/library/aa347733.aspx
  • http://www.castleproject.org/castle/projects.html
  • http://www.castleproject.org/container/facilities/trunk/wcf/index.html
  • http://docs.castleproject.org/Windsor.WCF-Facility-Async-Calls.ashx
  • http://msdn.microsoft.com/en-us/library/aa347733.aspx

Aucun commentaire:

Enregistrer un commentaire