Services Windows Communication Foundation et services de données WCF dans Visual Studio

Visual Studio fournit des outils pour utiliser Windows Communication Foundation (WCF) et WCF Data Services technologies Microsoft afin de créer des applications distribuées. Cette rubrique présente les services en se basant sur Visual Studio. Pour obtenir la documentation complète, consultez WCF Data Services 4.5.

Qu’est-ce que le service WCF ?

La technologie Windows Communication Foundation (WCF) est une infrastructure unifiée permettant de créer des applications distribuées sécurisées, fiables, transactionnelles et interopérables. Il remplace les anciennes technologies de communication interprocessus telles que les services web ASMX, .NET Remoting, Enterprise Services (Distributed Component Object Model (DCOM)) et Microsoft Message Queue (MSMQ). La technologie WCF regroupe les fonctionnalités de toutes ces technologies dans un modèle de programmation unifié. Cela simplifie l’expérience de développement d’applications distribuées.

Présentation de WCF Data Services

WCF Data Services est une implémentation de la norme du protocole Open Data (Open Data Protocol [OData]). Le composant WCF Data Services permet d’exposer des données tabulaires en tant qu’ensemble d’API REST, ce qui permet de retourner des données à l’aide de verbes HTTP standard comme GET, POST, PUT ou DELETE. Côté serveur, le composant WCF Data Services est remplacé par ASP.NET Web API pour la création de nouveaux services OData. La bibliothèque de client WCF Data Services reste un bon choix pour consommer des services OData dans une application .NET à partir de Visual Studio (Projet>Ajouter une référence de service). Pour plus d’informations, consultez WCF Data Services 4.5.

Modèle de programmation WCF

Le modèle de programmation WCF est basé sur la communication entre deux entités : un service WCF et un client WCF. Le modèle de programmation est encapsulé dans l’espace de noms System.ServiceModeldans .NET.

Service WCF

Un service WCF est basé sur une interface définissant un contrat entre le service et le client. Il est marqué avec un attribut ServiceContractAttribute, comme dans l’exemple de code suivant :

[ServiceContract]
public interface IService1

Vous définissez des fonctions ou des méthodes qui sont exposées par un service WCF en les marquant avec un attribut OperationContractAttribute.

[OperationContract]
string GetData(string value);

En outre, vous pouvez exposer des données sérialisées en marquant un type composite avec un attribut DataContractAttribute. Cela active la liaison de données dans un client.

Une fois qu’une interface et ses méthodes sont définies, elles sont encapsulées dans une classe qui implémente l’interface. Une classe de service WCF unique peut implémenter plusieurs contrats de service.

Un service WCF est exposé pour être consommé via un point de terminaison. Le point de terminaison constitue le seul moyen de communiquer avec le service. Il n’est pas possible d’accéder au service via une référence directe comme avec d’autres classes.

Le point de terminaison se compose d’une adresse, d’une liaison et d’un contrat. L'adresse définit l'emplacement du service. Il peut s'agir d'une URL, d'une adresse protocole FTP ou d'un chemin d'accès réseau ou local. Une liaison définit la façon dont vous communiquez avec le service. Les liaisons WCF fournissent un modèle polyvalent permettant de spécifier un protocole comme HTTP ou FTP, un mécanisme de sécurité comme l’authentification Windows ou des noms d’utilisateur et des mots de passe, etc. Un contrat inclut les opérations qui sont exposées par la classe de service WCF.

Plusieurs points de terminaison peuvent être exposés pour un service WCF unique. Cela permet à différents clients de communiquer avec le même service de différentes manières. Un service bancaire peut par exemple fournir un point de terminaison pour les employés et un autre pour les clients externes. Chacun utilise alors une adresse, une liaison et/ou un contrat différents.

Client WCF (WCF client)

Un client WCF se compose d’un proxy permettant à une application de communiquer avec un service WCF et d’un point de terminaison qui correspond à un point de terminaison défini pour le service. Le proxy est généré côté client dans le fichier app.config et inclut des informations sur les types et méthodes exposés par le service. Pour les services qui exposent plusieurs points de terminaison, le client peut sélectionner celui qui correspond le mieux à ses besoins, par exemple pour communiquer via le protocole HTTP et utiliser l’authentification Windows.

Une fois qu’un client WCF a été créé, vous référencez le service dans votre code comme pour tout objet. Pour appeler la méthode GetData indiquée précédemment par exemple, vous devez écrire du code qui ressemble à ceci :

private void button1_Click(System.Object sender, System.EventArgs e)
{
    ServiceReference1.Service1Client client = new
        ServiceReference1.Service1Client();
    string returnString;

    returnString = client.GetData(textBox1.Text);
    label1.Text = returnString;
}

Outils WCF dans Visual Studio

Visual Studio fournit des outils permettant de créer des services WCF et des clients WCF. Pour obtenir une procédure pas à pas présentant les outils, consultez Procédure pas à pas : création d’un service WPF simple dans Windows Forms.

Créer et tester des services WCF

Vous pouvez utiliser les modèles Visual Studio WCF comme base pour créer rapidement votre propre service. Vous pouvez ensuite utiliser l’hôte automatique du service WCF et le client de test WCF pour déboguer et tester le service. Ces outils offrent un cycle de débogage et de test rapide et pratique tout en supprimant l’obligation de se limiter à un modèle d’hébergement lors des phases initiales.

Modèles WCF

Les modèles WCF Visual Studio fournissent une structure de classe de base pour le développement de services. Plusieurs modèles WCF sont disponibles dans la boîte de dialogue Ajouter un nouveau projet. Il s’agit notamment des projets de bibliothèque du service WCF, des sites web du service WCF et des modèles d’élément du service WCF.

Quand vous sélectionnez un modèle, des fichiers sont ajoutés pour un contrat de service, une implémentation de service et une configuration de service. Tous les attributs nécessaires sont déjà ajoutés, ce qui crée un service simple de type « Hello World » sans que vous ayez besoin d’écrire de code. Vous devez bien sûr ajouter du code pour fournir des fonctions et des méthodes pour votre service réel, mais les modèles fournissent la base fondamentale.

Pour en savoir plus sur les modèles WCF, consultez Modèles Visual Studio WCF.

Hôte de service WCF

Quand vous démarrez le débogueur Visual Studio (en appuyant sur F5) pour un projet du service WCF, l’outil Hôte de service WCF démarre automatiquement pour héberger le service localement. L’hôte de service WCF énumère les services contenus dans un projet de service WCF, charge la configuration du projet et effectue l’instanciation d’un hôte pour chaque service trouvé.

En utilisant l’hôte de service WCF, vous pouvez tester un service WCF sans écrire de code supplémentaire ni vous limiter à un hôte spécifique pendant le développement.

Pour en savoir plus sur l’hôte de service WCF, consultez Hôte de service WCF (WcfSvcHost.exe).

Client test WCF

L’outil Client test WCF permet d’entrer des paramètres de test, d’envoyer ces entrées à un service WCF et d’afficher la réponse renvoyée par le service. Quand vous combinez cet outil à l’hôte de service WCF, il offre une expérience de test de service pratique. Cet outil se trouve dans le dossier %ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE.

Quand vous appuyez sur F5 pour déboguer un projet de service WCF, le client de test WCF s’ouvre et affiche une liste des points de terminaison de service qui sont définis dans le fichier de configuration. Vous pouvez tester les paramètres et démarrer le service. Répétez ce processus pour tester et valider régulièrement votre service.

Pour en savoir plus sur le client test WCF Client test WCF (WcfTestClient.exe).

Accès aux services WCF dans Visual Studio

Visual Studio simplifie la création de clients WCF, en générant automatiquement un proxy et un point de terminaison pour les services que vous ajoutez à l’aide de la boîte de dialogue Ajouter une référence de service. Toutes les informations de configuration nécessaires sont ajoutées au fichier app.config. La plupart du temps, il suffit d’instancier le service pour l’utiliser.

Dans la boîte de dialogue Ajouter une référence de service, vous pouvez entrer l’adresse d’un service ou rechercher un service qui est défini dans votre solution. La boîte de dialogue retourne une liste des services et des opérations qu’ils fournissent. Vous pouvez également définir l’espace de noms utilisé pour référencer les services dans le code.

La boîte de dialogue Configurer les références de service permet de personnaliser la configuration d’un service. Vous pouvez modifier l’adresse d’un service, spécifier le niveau d’accès, le comportement asynchrone et les types de contrats de message, et configurer la réutilisation des types.

Sélectionner un point de terminaison de service

Certains services Windows Communication Foundation (WCF) exposent plusieurs points de terminaison via lesquels un client peut communiquer avec le service. Un service peut par exemple exposer un point de terminaison utilisant une liaison HTTP et une sécurité par nom d’utilisateur et de mot de passe, ainsi qu’un deuxième point de terminaison utilisant le protocole FTP et l’authentification Windows. Le premier point de terminaison peut être utilisé par les applications qui accèdent au service à l’extérieur d’un pare-feu, tandis que le deuxième peut être utilisé sur un intranet.

Dans ce cas, vous pouvez spécifier endpointConfigurationName en tant que paramètre du constructeur comme référence de service.

Notes

Dans cet article, il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains éléments de l’interface utilisateur Visual Studio. Il se peut que vous utilisiez une autre édition de Visual Studio ou d’autres paramètres d’environnement. Pour plus d’informations, consultez Personnaliser l’IDE.

Pour sélectionner un point de terminaison de service

  1. Ajoutez une référence à un service WCF en cliquant avec le bouton droit sur le nœud du projet dans Explorateur de solutions et en choisissant Ajouter une référence de service.

  2. Dans l’éditeur de code, ajoutez un constructeur pour la référence de service :

    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
    

    Notes

    Remplacez ServiceReference par l’espace de noms pour la référence de service et remplacez Service1Client par le nom du service.

  3. Une liste IntelliSense s’affiche qui inclut les surcharges du constructeur. Sélectionnez la surcharge endpointConfigurationName As String.

  4. Après la surcharge, tapez = ConfigurationName, où ConfigurationName est le nom du point de terminaison que vous souhaitez utiliser.

    Notes

    Si vous ne connaissez pas les noms des points de terminaison disponibles, vous pouvez les trouver dans le fichier app.config.

Pour rechercher les points de terminaison disponibles pour un service WCF

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le fichier app.config du projet qui contient la référence de service, puis sélectionnez Ouvrir. Le fichier s’affiche dans l’éditeur de code.

  2. Recherchez la balise <Client> dans le fichier.

  3. Sous la balise <Client>, recherchez une balise qui commence par <Endpoint>.

    Si la référence de service fournit plusieurs points de terminaison, vous trouverez au moins deux balises <Endpoint.

  4. À l’intérieur de la balise <EndPoint>, vous trouverez un paramètre name="SomeService" (où SomeService représente un nom du point de terminaison). Il s’agit du nom du point de terminaison qui peut être transmis à la surcharge endpointConfigurationName As String d’un constructeur comme référence de service.

Appeler une méthode de service de manière asynchrone

La plupart des méthodes des services Windows Communication Foundation (WCF) peuvent être appelées de manière synchrone ou asynchrone. L’appel d’une méthode de manière asynchrone permet à votre application de continuer à fonctionner pendant l’appel de la méthode en cas de connexion lente.

Quand une référence de service est ajoutée à un projet, elle est configurée par défaut pour appeler les méthodes de manière synchrone. Vous pouvez modifier ce comportement pour appeler les méthodes de manière asynchrone en modifiant un paramètre dans la boîte de dialogue Configurer la référence de service.

Notes

Cette option est définie par service. Si une méthode d’un service est appelée de manière asynchrone, l’ensemble des méthodes doivent être appelées de manière asynchrone.

Notes

Dans cet article, il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains éléments de l’interface utilisateur Visual Studio. Il se peut que vous utilisiez une autre édition de Visual Studio ou d’autres paramètres d’environnement. Pour plus d’informations, consultez Personnaliser l’IDE.

Pour appeler une méthode de service de manière asynchrone

  1. Dans l’Explorateur de solutions, sélectionnez la référence de service.

  2. Dans le menu Projet, cliquez sur Configurer la référence de service.

  3. Dans la boîte de dialogue Configurer la référence de service, cochez la case Générer des opérations asynchrones.

Lier des données retournées par un service

Vous pouvez lier des données retournées par un service Windows Communication Foundation (WCF) à un contrôle, comme vous pouvez lier toute source de données à un contrôle. Quand vous ajoutez une référence à un service WCF, si le service contient des types composites qui retournent des données, ils sont automatiquement ajoutés dans la fenêtre Sources de données.

Pour lier un contrôle à un champ de données unique retourné par un service WCF

  1. Dans le menu Données , cliquez sur Afficher les sources de données.

    La fenêtre Sources de données apparaît.

  2. Dans la fenêtre Sources de données, développez le nœud pour votre référence de service. Tous les types composites retournés par le service s’affichent.

  3. Développez un nœud pour un type. Les champs de données de ce type s’affichent.

  4. Sélectionnez un champ et cliquez sur la flèche déroulante pour afficher une liste de contrôles disponibles pour le type de données.

  5. Cliquez sur le type de contrôle auquel vous souhaitez lier le champ.

  6. Faites glisser le champ dans un formulaire. Le contrôle est ajouté au formulaire, ainsi qu’un composant BindingSource et un composant BindingNavigator.

  7. Répétez les étapes 4 à 6 pour tous les autres champs que vous souhaitez lier.

Pour lier un contrôle au type composite retourné par un service WCF

  1. Dans le menu Données, sélectionnez Afficher les sources de données. La fenêtre Sources de données apparaît.

  2. Dans la fenêtre Sources de données, développez le nœud pour votre référence de service. Tous les types composites retournés par le service s’affichent.

  3. Sélectionnez un nœud pour un type et cliquez sur la flèche déroulante pour afficher les options disponibles.

  4. Cliquez soit sur DataGridView pour afficher les données dans une grille, soit sur Détails pour afficher les données dans des contrôles individuels.

  5. Faites glisser le nœud dans le formulaire. Les contrôles sont ajoutés au formulaire, ainsi qu’un composant BindingSource et un composant BindingNavigator.

Configurer un service afin de réutiliser des types existants

Quand une référence de service est ajoutée à un projet, tous les types définis dans le service sont générés dans le projet local. Dans de nombreux cas, cette action crée des types en double quand un service utilise des types .NET courants ou lorsque des types sont définis dans une bibliothèque partagée.

Pour éviter ce problème, les types qui se trouvent dans les assemblys référencés sont partagés par défaut. Si vous souhaitez désactiver le partage de type pour un ou plusieurs assemblys, vous pouvez le faire dans la boîte de dialogue Configurer les références de service.

Pour désactiver le partage de type dans un assembly unique

  1. Dans l’Explorateur de solutions, sélectionnez la référence de service.

  2. Dans le menu Projet, cliquez sur Configurer la référence de service.

  3. Dans la boîte de dialogue Configurer les références de service, sélectionnez Réutiliser les types dans les assemblys référencés spécifiés.

  4. Cochez la case pour chaque assembly dans lequel vous souhaitez activer le partage de type. Pour désactiver le partage de type pour un assembly, laissez la case décochée.

Pour désactiver le partage de type dans tous les assemblys

  1. Dans l’Explorateur de solutions, sélectionnez la référence de service.

  2. Dans le menu Projet, cliquez sur Configurer la référence de service.

  3. Dans la boîte de dialogue Configurer les références de service, décochez la case Réutiliser les types dans les assemblys référencés.

Intitulé Description
Procédure pas à pas : création d’un service WPF simple dans Windows Forms Fournit une démonstration pas à pas de la création et de l’utilisation des services WCF dans Visual Studio.
Procédure pas à pas : Création d’un service de données WCF avec WPF et Entity Framework Fournit une démonstration pas à pas montrant comment créer et utiliser WCF Data Services dans Visual Studio.
Utilisation des outils de développement WCF Explique comment créer et tester des services WCF dans Visual Studio.
Guide pratique pour ajouter, mettre à jour ou supprimer une référence de service de données WCF
Dépannage des références de service Présente certaines erreurs courantes liées aux références de service et comment les éviter.
Débogage de services WCF Décrit des problèmes et des techniques de débogage courants relatifs au débogage des services WCF.
Procédure pas à pas : Création d’une application de données multiniveau Fournit des instructions pas à pas pour créer un dataset typé et diviser le code du TableAdapter et du dataset en plusieurs projets.
Configurer la boîte de dialogue Référence de service Décrit les éléments d’interface utilisateur de la boîte de dialogue Configurer la référence de service.

Informations de référence

Voir aussi