Comment : appeler des opérations de service WCF de façon asynchrone
Cette rubrique présente comment un client peut accéder de façon asynchrone à une opération de service. Le service dans cette rubrique implémente l'interface ICalculator
. Le client peut appeler les opérations sur cette interface de manière asynchrone à l'aide du modèle d'appel asynchrone commandé par événement. (Pour plus d'informations sur le modèle d'appel asynchrone basé sur les événements, consultez Multithreaded Programming with the Event-based Asynchronous Pattern). Pour obtenir un exemple illustrant comment implémenter une opération de façon asynchrone dans un service, consultez Comment : implémenter une opération de service asynchrone. Pour plus d'informations sur les opérations synchrones et asynchrones, consultez Opérations synchrones et asynchrones.
Remarque : |
---|
Le modèle d'appel asynchrone commandé par événement n'est pas pris en charge lorsqu'il utilise un ChannelFactory. Pour plus d'informations sur les appels asynchrones à l'aide de ChannelFactory, consultez Comment : appeler des opérations de façon asynchrone à l'aide d'une fabrication de canal. |
Procédure
Pour appeler des opérations de service WCF de façon asynchrone
Exécutez l'outil ServiceModel Metadata Utility Tool (Svcutil.exe) en définissant les deux options /async et /tcv:Version35 comme illustré dans la commande suivante.
svcutil /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost:8000/servicemodelsamples/service/mex /a /tcv:Version35
Cette opération génère en plus des opérations asynchrones basées sur les délégués standard et des opérations synchrones, un client WCF qui contient :
- Deux opérations <operationName>Async destinées à l'approche de l'appel asynchrone basé sur les événements. Par exemple :
- Les événements terminés d'opérations de la forme <operationName>Completed destinés à l'approche de l'appel asynchrone basé sur les événements. Par exemple :
- Les types System.EventArgs pour chaque opération (de la forme <operationName>CompletedEventArgs) destinés à l'approche de l'appel asynchrone basé sur les événements. Par exemple :
Dans l'application d'appel, créez une méthode de rappel à appeler au terme de l'opération asynchrone en vous conformant à l'exemple de code suivant.
Avant d'appeler l'opération, utilisez un nouveau System.EventHandler générique de type <operationName>EventArgs pour ajouter la méthode de gestionnaire d'événements (créée à l'étape précédente) à l'événement <operationName>Completed. Ensuite, appelez la méthode <operationName>Async. Par exemple :
Exemple
Remarque : |
---|
Les règles de conception pour le modèle asynchrone basé sur les événements stipulent que si plusieurs valeurs sont retournées, une valeur est retournée comme la propriété Result et les autres sont retournées comme les propriétés sur l'objet EventArgs. Il en découle que si un client importe des métadonnées à l'aide des options de commande asynchrone basées sur les événements et que l'opération retourne plusieurs valeurs, l'objet EventArgs par défaut retourne une valeur comme la propriété Result et le reste sont des propriétés de l'objet EventArgs. Pour recevoir l'objet message comme la propriété Result et que les valeurs retournées sur cet objet soient des propriétés, utilisez l'option de commande /messageContract. Cette opération génère une signature qui retourne le message de réponse comme la propriété Result sur l'objet EventArgs. Toutes les valeurs de retour internes sont ensuite des propriétés de l'objet de message de réponse. |