Partager via


Fabrique de canaux

L’exemple ChannelFactory montre comment une application cliente peut créer un canal avec la classe ChannelFactory au lieu d’un client généré. Cet exemple est basé sur la Prise en main qui implémente un service de calculatrice.

Notes

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

Cet exemple utilise la classe ChannelFactory<TChannel> pour créer un canal à un point de terminaison de service. En général, pour créer un canal à un point de terminaison de service, vous générez un type de client avec l’Outil ServiceModel Metadata Utility (Svcutil.exe) et créez une instance du type généré. Vous pouvez également créer un canal en utilisant la classe ChannelFactory<TChannel>, comme le montre cet exemple. Le service créé par l’exemple de code suivant est identique au service de la section Prise en main.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
                    ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();

Important

Si vous exécutez cet exemple dans un scénario à plusieurs ordinateurs, vous devez remplacer « localhost » dans le code précédent par le nom qualifié complet de l'ordinateur qui exécute le service. Cet exemple n'utilise pas de configuration pour définir l'adresse de point de terminaison, donc cela doit être fait dans le code.

Une fois le canal créé, les opérations de service peuvent être appelées comme pour un client généré.

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = channel.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

Pour fermer le canal, il faut d'abord le caster en une interface IClientChannel. Cela est dû au fait que le canal, tel que généré, est déclaré dans l'application cliente à l'aide de l'interface ICalculator, qui possède des méthodes comme Add et Subtract mais pas Close. La méthode Close provient de l'interface ICommunicationObject.

// Close the channel.
 ((IClientChannel)client).Close();

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 ENTER dans la fenêtre de l'application pour fermer l'application cliente.

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 l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples. Notez que cet exemple n'active pas la publication des métadonnées. Vous devez d'abord activer la publication des métadonnées pour cet exemple pour régénérer le type de client.

  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.

Pour exécuter l'exemple sur plusieurs ordinateurs

Remplacez « localhost » dans le code suivant par le nom qualifié complet de l'ordinateur qui exécute le service.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");