Architecture du client

Les applications utilisent des objets de client Windows Communication Foundation (WCF) pour appeler des opérations de service. Cette rubrique contient des informations sur les objets de client WCF, les canaux de client WCF et leurs relations par rapport à l'architecture de canal sous-jacente. Pour une vue d'ensemble de base des objets de client WCF, consultez Vue d'ensemble d'un client WCF. Pour plus d'informations sur la couche de canal, consultez Extension de la couche du canal.

Vue d'ensemble

L'exécution de modèle de service crée des clients WCF qui se composent des éléments suivants :

  • Implémentation de client générée automatiquement d'un contrat de service qui transforme les appels de votre code d'application en messages sortants, les messages de réponse en paramètres de sortie et retourne des valeurs pouvant être récupérées par votre application.
  • Implémentation d'une interface de contrôle (System.ServiceModel.IClientChannel) qui regroupe différentes interfaces et fournit l'accès au contrôle des fonctionnalités, plus précisément aux fonctionnalités permettant de fermer la session client et de déployer le canal.
  • Canal de client construit en fonction des paramètres de configuration spécifiés par la liaison utilisée.

Les applications peuvent créer de tels clients à la demande, via une fabrication System.ServiceModel.ChannelFactory ou en créant une instance d'une classe dérivée ClientBase celle-ci étant générée par l'outil ServiceModel Metadata Utility Tool (Svcutil.exe). Ces classes de client déjà construites encapsulent une implémentation de canal de client construite dynamiquement par un ChannelFactory et délèguent vers cette implémentation. Par conséquent, cette rubrique traite principalement des canaux de client et de la fabrication de canal à leur origine.

Objets et canaux de client

L'interface de base des clients WCF correspond à l'interface System.ServiceModel.IClientChannel qui expose la fonctionnalité principale de client, la fonctionnalité d'objet de communication de base de System.ServiceModel.ICommunicationObject, la fonctionnalité de contexte de System.ServiceModel.IContextChannel et le comportement extensible de System.ServiceModel.IExtensibleObject.

Toutefois, l'interface IClientChannel ne définit pas de contrat de service. Ces contrats sont déclarés par l'interface de contrat de service (générée en principe à partir des métadonnées de service à l'aide d'un outil tel que ServiceModel Metadata Utility Tool (Svcutil.exe)). Les types de clients WCF étendent à la fois IClientChannel et l'interface de contrat de service cible pour permettre aux applications d'appeler directement les opérations et leur permettre d'accéder en cours d'exécution aux fonctionnalités côté client. La création d'un client WCF fournit des objets WCFSystem.ServiceModel.ChannelFactory et les informations nécessaires pour créer un processus d'exécution pouvant se connecter au point de terminaison de service configuré et interagir avec ce dernier.

Comme mentionné précédemment, les deux types de clients WCF doivent être configurés pour pouvoir être utilisés. Le type de client WCF le plus simple correspond à un ensemble d'objets qui dérivent de ClientBase (ou de DuplexClientBase si le contrat de service est un contrat duplex). Vous pouvez créer ces types en utilisant un constructeur (ou un fichier de configuration) configuré par un programme, puis appelé directement pour appeler les opérations de service. Pour une vue d'ensemble de base des objets ClientBase, consultez Vue d'ensemble d'un client WCF.

Le second type est généré pendant l'exécution depuis un appel de la méthode CreateChannel. Les applications pour lesquelles le contrôle stricte des spécifications de communication est important utilisent en général ce type de client et appellent un objet de canal de client, ce dernier leur permettant d'interagir plus directement que le système de canal et d'exécution de client sous-jacent.

Fabrication de canal

La classe qui est chargée de créer le processus d'exécution sous-jacent prenant en charge les appels de client correspond à System.ServiceModel.ChannelFactory. Les objets de client WCF et les objets de canal de client WCF utilisent un objet ChannelFactory pour créer des instances. L'objet de client dérivé ClientBase encapsule la gestion de la fabrication de canal. Dans certaines situations, il est tout à fait possible cependant d'utiliser directement la fabrication de canal. Vous souhaiterez le plus souvent créer à plusieurs reprises de nouveaux canaux de client à partir de la fabrication de canal existante. Si vous utilisez un objet de client, vous pouvez obtenir la fabrication de canal sous-jacente à partir d'un objet de client WCF en appelant la propriété System.ServiceModel.ClientBase.ChannelFactory.

Concernant les fabrications de canaux, il est important de garder à l'esprit qu'elles créent des nouvelles instances de canaux de client pour la configuration fournie avant l'appel de la méthode System.ServiceModel.ChannelFactory.CreateChannel. Après avoir appelé CreateChannel (ou System.ServiceModel.ClientBase.Open, System.ServiceModel.ClientBase.CreateChannelou toute opération d'un objet de client WCF), vous ne pouvez plus modifier la fabrication de canal et espérer obtenir des canaux vers des instances de service différentes, même si vous modifiez l'adresse de point de terminaison cible. Si vous souhaitez créer un objet de client ou un canal de client avec une configuration différente, vous devez d'abord créer une nouvelle fabrication de canal.

Pour plus d'informations sur les différents problèmes pouvant survenir lors de l'utilisation des objets de client WCF et des canaux de client WCF, consultez Accès aux services à l'aide d'un client.

Les deux sections suivantes contiennent des instructions permettant de créer et d'utiliser les objets de canal de client WCF.

Création d'un nouvel objet de canal de client WCF

Dans notre exemple illustrant l'utilisation d'un canal de client, nous supposons que le contrat de service suivant a été généré.

Pour vous connecter à un service ISampleService, utilisez l'interface de contrat générée directement avec une fabrication de canal (ChannelFactory). Après avoir créé et configuré une fabrication de canal pour un contrat particulier, vous pouvez appeler la méthode CreateChannel pour retourner des objets de canal de client qui vous permettront de communiquer avec un service ISampleService.

Lorsque vous utilisez la classe ChannelFactory avec une interface de contrat de service, vous devez transtyper vers l'interface IClientChannel pour ouvrir, fermer ou abandonner le canal de manière explicite. Pour faciliter son utilisation, l'outil Svcutil.exe génère également une interface d'assistance qui implémente à la fois la l'interface de contrat de service et IClientChannel, vous permettant ainsi d'interagir avec l'infrastructure de canal client sans avoir à transtyper. L'exemple de code suivant définit un canal de client d'assistance qui implémente le contrat de service précédent.

Création d'un nouvel objet de canal de client WCF

Pour utiliser un canal client et se connecter à un service ISampleService, utilisez directement l'interface de contrat générée (ou la version d'assistance) avec une fabrication de canal, en passant le type de l'interface de contrat comme paramètre de type. Après avoir créé et configuré une fabrication de canal pour un contrat particulier, vous pouvez appeler la méthode System.ServiceModel.ChannelFactory.CreateChannel pour retourner des objets de canal client qui vous permettront de communiquer avec un service ISampleService.

Une fois créés, les objets de canal de client implémentent IClientChannel ainsi que l'interface de contrat. Par conséquent, vous pouvez les utiliser directement pour appeler les opérations qui interagissent avec un service prenant en charge le contrat.

La différence entre les objets de client et les objets de canal de client réside dans leurs modalités de contrôle et leur simplicité d'utilisation. De nombreux développeurs, qui se sentent à l'aise avec les classes et les objets, préféreront utiliser les objets de client WCF plutôt que les canaux de client WCF.

Pour obtenir un exemple, consultez Comment : utiliser la classe ChannelFactory.