Partager via


Route by Body

L’exemple RouteByBody montre comment implémenter un service qui accepte des objets de message avec toute action SOAP. Cet exemple est basé sur la Prise en main qui implémente un service de calculatrice. Le service implémente une opération Calculate unique qui accepte un paramètre de demande Message et retourne une réponse Message.

Dans cet exemple, le client est une application console (.exe) et le service est hébergé dans IIS.

Notes

La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique.

L'exemple illustre la distribution des messages selon le contenu du corps. Le mécanisme de distribution des messages du modèle de service WCF (Windows Communication Foundation) intégré est basé sur les actions de message. Toutefois, il existe de nombreux services Web qui définissent toutes leurs opérations avec l'action="". Il est impossible de générer un service reposant sur WSDL qui continue à distribuer des messages de demande selon les informations d'action. Cet exemple montre un contrat de service basé sur WSDL (WSDL est contenu dans Service.wsdl, lui-même inclus dans l'exemple). Il s’agit d’un contrat de service de calculatrice, semblable à celui utilisé dans Prise en main. Toutefois, le [OperationContract] spécifie Action="" pour toutes les opérations.

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples"),
                 XmlSerializerFormat, DispatchByBodyBehavior]
    public interface ICalculator
    {
        [OperationContract(Action="")]
        double Add(double n1, double n2);
        [OperationContract(Action = "")]
        double Subtract(double n1, double n2);
        [OperationContract(Action = "")]
        double Multiply(double n1, double n2);
        [OperationContract(Action = "")]
        double Divide(double n1, double n2);
    }

Selon le contrat, le service requiert le comportement de distribution personnalisé DispatchByBodyBehavior pour autoriser les messages à être distribués entre des opérations. Ce comportement de distribution initialise le sélecteur d’opération personnalisé DispatchByBodyElementOperationSelector avec une table des noms d’opération indexés par le QName des éléments wrapper respectifs. DispatchByBodyElementOperationSelector examine la balise de début du premier enfant du corps et sélectionne l'opération à l'aide du tableau mentionné précédemment.

Le client utilise un proxy généré automatiquement du WSDL exporté par le service à l’aide de ServiceModel Metadata Utility Tool (Svcutil.exe).

svcutil.exe  /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedProxy.cs

Le fait que les actions de toutes les opérations soient vides n'a aucun impact sur le code client, à l'exception des paramètres d'action du proxy généré automatiquement.

Le code client effectue plusieurs calculs. Lorsque vous exécutez l'exemple, les demandes et réponses d'opération s'affichent dans la fenêtre de console du client. Appuyez sur Entrée dans la fenêtre du client pour l'arrêter.

Add(100, 15.99) = 115.99
Subtract(145, 76.54) = 68.46
Multiply(9, 81.25) = 731.25
Divide(22, 7) = 3.14285714285714

Press <ENTER> to terminate client.

Pour configurer, générer et exécuter l'exemple

  1. Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.

  2. Pour générer la solution, suivez les instructions indiquées dans la rubrique Génération des exemples Windows Communication Foundation.

  3. Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans la rubrique Exécution des exemples Windows Communication Foundation.