Nouveautés dans Windows Communication Foundation 4.5

Cette rubrique traite des nouvelles fonctionnalités de WCF (Windows Communication Foundation) version 4.5.

gRPC comme solution alternative à WCF

gRPC est une infrastructure RPC moderne qui est une solution alternative populaire à WCF. gRPC est basé sur HTTP/2, ce qui offre un certain nombre d’avantages par rapport à WCF, notamment :

  • Performances : gRPC est beaucoup plus efficace que WCF, en particulier pour les connexions longues.
  • Scalabilité : gRPC est conçu pour s’adapter à un grand nombre de clients et de serveurs.
  • Sécurité : gRPC prend en charge divers mécanismes de sécurité, notamment TLS et l’authentification.
  • Multiplateforme : gRPC est indépendant des plateformes et peut être utilisé avec divers langages de programmation.

Pour plus d’informations sur le développement ou la migration d’applications WCF vers gRPC, consultez :

Fonctionnalités de simplification de WCF

Beaucoup de travail a été effectué pour faciliter le développement et la gestion des applications WCF 4.5. Pour plus d’informations, consultez Fonctionnalités de simplification WCF.

Prise en charge du modèle asynchrone basé sur les tâches

Par défaut, la fonctionnalité Ajouter une référence de service génère des méthodes d’opération de service asynchrone retournant des tâches. Cette opération est effectuée pour les méthodes synchrones et asynchrones. Cela vous permet d’appeler les opérations de service de façon asynchrone à l’aide du modèle de programmation asynchrone basé sur les tâches. Lorsque vous appelez la méthode de proxy générée, WCF construit un objet Tâche pour représenter l’opération asynchrone et retourne cette tâche. La tâche se termine lorsque l’opération se termine. Si vous implémentez une opération asynchrone, vous pouvez l’implémenter en tant qu’opération asynchrone basée sur les tâches. Pour plus d’informations, consultez Opérations synchrones et asynchrones.

Fichiers de configuration générés simplifiés

Lorsque vous ajoutez une référence de service dans Visual Studio ou utilisez l'outil SvcUtil.exe, un fichier de configuration client est généré. Dans les versions antérieures de WCF, ces fichiers de configuration contenaient la valeur de chaque propriété de liaison et ce, même si sa valeur était la valeur par défaut. Dans WCF 4.5, les fichiers de configuration générés contiennent uniquement les propriétés de liaison qui ont une valeur non définie par défaut.

Pour plus d’informations, consultez Fonctionnalités de simplification WCF.

Développement Contrat en premier

WCF prend désormais en charge le développement Contrat en premier. L’outil svcutil.exe a un commutateur /serviceContract qui vous permet de générer le service et les contrats de données à partir d’un document WSDL.

Ajouter une référence de service d'un projet de sous-ensemble portable

Les projets portables du sous-ensemble permettent aux programmeurs d’assembly .NET de maintenir une arborescence source et un système de génération uniques tout en prenant en charge plusieurs plateformes .NET (de bureau, Silverlight, Windows Phone et Xbox). Les projets de sous-ensemble portable référencent uniquement les bibliothèques portables .NET qui sont des assemblys qui peuvent être utilisées sur n’importe quelle plateforme .NET. L'expérience du développeur est identique à celle de l'ajout d'une référence de service dans une autre application cliente WCF. Pour plus d’informations, consultez Ajouter une référence de service dans un projet de sous-ensemble portable.

Modification de la valeur par défaut pour le mode de compatibilité ASP.NET

WCF fournit le mode de compatibilité ASP.NET pour accorder aux développeurs l'accès total aux fonctionnalités dans le pipeline HTTP ASP.NET lors de l'écriture des services WCF. Pour utiliser ce mode, vous devez définir l’attribut aspNetCompatibilityEnabled sur true dans la section <serviceHostingEnvironment> de web.config. En outre, tout service de ce domaine d’application doit avoir la propriété RequirementsMode sur son AspNetCompatibilityRequirementsAttribute définie sur Allowed ou Required. Par défaut, AspNetCompatibilityRequirementsAttribute a maintenant la valeur Allowed. Pour plus d’informations, consultez Services WCF et ASP.NET.

Valeurs par défaut pour le nouveau transport

Afin de simplifier la configuration, plusieurs valeurs de propriété de transport par défaut ont été modifiées. Pour plus d’informations, consultez Fonctionnalités de simplification WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas contient des valeurs de quota configurables pour les lecteurs du dictionnaire XML qui limitent la quantité de mémoire utilisée par un encodeur lors de la création d'un message. Bien que ces quotas soient configurables, les valeurs par défaut ont changé pour réduire le risque qu'un développeur doivent les définir explicitement. Pour plus d’informations, consultez Fonctionnalités de simplification WCF.

Validation de configuration WCF

Dans le cadre du processus de génération dans Visual Studio, les fichiers de configuration WCF sont maintenant validés pour les attributs définis dans le projet. Une liste d'erreurs ou d'avertissements de validation s'affiche dans Visual Studio si la validation échoue.

Info-bulles de l'éditeur XML

Pour aider les développeurs de services WCF nouveaux et existants à configurer leurs services, l'Éditeur XML de Visual Studio fournit maintenant des info-bulles pour chaque élément de configuration et ses propriétés qui fait partie du fichier de configuration du service.

Améliorations de la diffusion en continu

Ajout de la prise en charge de la diffusion en continu asynchrone là où le côté expéditeur ne bloque pas les threads si le côté destinataire ne lit pas ou n'est pas lent dans la lecture, ce qui accroît l'extensibilité. Suppression de la limitation de mise en mémoire tampon des messages lorsqu'un client envoie un message transmis en continu à un service WCF hébergé par IIS. Pour plus d’informations, consultez Fonctionnalités de simplification WCF.

Simplifier l'exposition d'un point de terminaison sur HTTPS avec IIS

Un mappage de protocole HTTPS a été ajouté pour simplifier l'exposition d'un point de terminaison sur HTTPS. Pour activer un point de terminaison HTTPS, assurez-vous que votre site web dispose d’une liaison HTTPS et d’un certificat SSL configurés, puis activez HTTPS pour le répertoire virtuel qui héberge le service. Si les métadonnées sont activées pour le service, elles seront également exposées via HTTPS.

Génération d'un seul document WSDL

Certaines piles de traitement WSDL tierces ne peuvent pas traiter les documents WSDL qui dépendent d'autres documents via un xsd:import. WCF vous permet maintenant de spécifier que toutes les informations WSDL doivent être retournées dans un document unique. Pour demander un seul document WSDL, ajoutez « ?singleWSDL » à l’URI lorsque vous demandez des métadonnées de service.

Prise en charge de WebSocket

WebSockets est une technologie qui fournit la véritable communication bidirectionnelle sur les ports 80 et 443 avec des caractéristiques de performances semblables à TCP. Deux nouvelles liaisons ont été ajoutées pour prendre en charge les communications via un transport WebSocket. Voir NetHttpBinding et NetHttpsBinding. Pour plus d’informations, consultez Liaisons fournies par le système.

Valeurs par défaut pour le nouveau transport

Le tableau suivant décrit les paramètres qui ont changé et où trouver des informations supplémentaires.

Propriété Activé Nouvelle valeur par défaut Pour plus d’informations, consultez
channelInitializationTimeout NetTcpBinding 30 secondes ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * nombre de processeurs ListenBacklog
maxPendingAccepts ConnectionOrientedTransportBindingElement

SMSvcHost.exe
2 * nombre de processeurs pour le transport

4 * nombre de processeurs pour SMSvcHost.exe
MaxPendingAcceptsConfiguration du service de partage de ports Net.TCP
maxPendingConnections ConnectionOrientedTransportBindingElement 12 * nombre de processeurs MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 secondes Configuration du service de partage de ports Net.TCP

Configuration de services WCF dans le code

Windows Communication Foundation (WCF) permet aux développeurs de configurer des services à l’aide de fichiers de configuration ou de code. Les fichiers de configuration sont utiles lorsqu'un service doit être configuré après avoir été déployé. Lorsqu'il utilise des fichiers de configuration, un professionnel de l'informatique doit uniquement mettre à jour le fichier de configuration, aucune recompilation n'est nécessaire. Les fichiers de configuration, toutefois, peuvent être complexes et difficiles à gérer. Il n'existe aucune prise en charge du débogage de fichiers de configuration et les éléments de configuration sont référencés par des noms. La création de fichiers de configuration est donc susceptible d'engendrer des erreurs et difficile. WCF vous permet également de configurer des services dans le code. Dans les versions antérieures de WCF (4.0 et versions antérieures), la configuration de services dans le code était simple dans les scénarios auto-hébergés ; la classe ServiceHost vous autorisait à configurer les points de terminaison et les comportements avant d’appeler ServiceHost.Open. Dans les scénarios hébergés sur le Web, toutefois, vous n'avez pas accès à la classe ServiceHost. Pour configurer un service hébergé sur le Web vous deviez créer un System.ServiceModel.ServiceHostFactory qui créait le ServiceHostFactory et effectuait la configuration nécessaire. À compter de .NET Framework 4.5, WCF offre un moyen plus simple de configurer des services auto-hébergés et hébergés sur le web dans le code. Pour plus d’informations, consultez Configuration de services WCF dans le code.

Mise en cache de ChannelFactory

Les applications clientes WCF utilisent la classe ChannelFactory<TChannel> pour créer un canal de communication avec un service WCF. La création d'instances ChannelFactory<TChannel> entraîne une certaine charge, car elle comporte les opérations suivantes :

  1. Construction de l’arborescence ContractDescription

  2. Refléter tous les types CLR requis

  3. Construction de la pile de canaux

  4. Suppression de ressources

Pour réduire cette surcharge, WCF peut mettre en cache les fabriques de canaux lorsque vous utilisez un proxy du client WCF. Pour plus d’informations, consultez Fabrication de canal et mise en cache.

Compression et encodeur binaire

Depuis WCF 4.5, l'encodeur binaire WCF ajoute la prise en charge de la compression. Le type de compression est configuré avec la propriété CompressionFormat. Le client et le service doivent configurer la propriété CompressionFormat. La compression fonctionnera pour les protocoles HTTP, HTTPS et TCP. Si un client détermine l'utilisation de la compression, mais le service ne la prend pas en charge, une exception de protocole est levée indiquant une incompatibilité de protocole. Pour plus d’informations, consultez Choix d’un encodeur de message.

UDP

La prise en charge a été ajoutée pour un transport UDP, qui permet aux développeurs d’écrire des services qui utilisent la messagerie de type « déclenché et oublié » (fire and forget). Un client envoie un message à un service et n'attend aucune réponse de ce dernier.

Prise en charge de plusieurs authentifications

La prise en charge a été ajoutée pour prendre en charge plusieurs modes d'authentification, tels que pris en charge par IIS, sur un point de terminaison unique WCF lorsque vous utilisez le transport et la sécurité de transport HTTP. IIS vous permet d'activer plusieurs modes d'authentification sur un répertoire virtuel, cette fonctionnalité permet à un seul point de terminaison WCF de prendre en charge plusieurs modes d'authentification activés pour le répertoire virtuel où le service WCF est hébergé.

Prise en charge IDN

La prise en charge a été ajoutée pour tenir compte des services WCF avec des noms IDN (Internationalized Domain Names). Pour plus d’informations, consultez WCF et noms de domaine internationalisés.

HttpClient

Une nouvelle classe appelée HttpClient a été ajoutée pour faciliter l'utilisation des requêtes HTTP. Pour plus d’informations, consultez HttpClient et Instructions d’utilisation de HttpClient.

Configuration d’IntelliSense

Les valeurs d’attributs dans les fichiers de configuration pour les attributs personnalisés définis dans le projet prennent désormais en charge IntelliSense, afin de rendre les configurations plus rapides et précises.

Info-bulles de configuration

Les éléments et les attributs WCF ont maintenant des info-bulles dans l’éditeur XML afin d’identifier plus facilement et plus précisément l’objectif de l’élément ou de l’attribut.

Coller les données sous forme de classes

Dans un projet WCF, les types de données définis en XML (tels que ceux exposés dans un service) peuvent être collés directement dans une page de codes. Le type XML sera collé comme type CLR. Pour plus d’informations, consultez Génération de classes de type de données à partir de XML.

WebServiceHost et points de terminaison par défaut

Dans Visual Studio 2010, WebServiceHost a automatiquement créé un point de terminaison par défaut, que vous ayez ou non spécifié explicitement un point de terminaison. Dans Visual Studio 2012 et versions ultérieures, WebServiceHost crée un point de terminaison par défaut uniquement si aucun point de terminaison n’est explicitement ajouté. Si votre client attend le point de terminaison par défaut, ajoutez un point de terminaison et faites pointer le client vers ce dernier. Sinon, indiquez à WCF de rétablir le comportement précédent en ajoutant le paramètre suivant au fichier de configuration de l'application

<appSettings>
    <add key="wcf:webservicehost:enableautomaticendpointscompatability" value="true"/>
  </appSettings>

IHttpCookieContainerManager

Cette interface, exposée par IChannelFactory<TChannel>, facilite l'utilisation des cookies côté client. Lorsque AllowCookies a la valeur True sur la liaison, accédez aux cookies à l’aide du code suivant :

IHttpCookieContainerManager cookieManager = factory.GetProperty<IHttpCookieContainerManager>();
System.Net.CookieContainer container = cookieManager.CookieContainer;

Vous pouvez ensuite récupérer ou définir les cookies à partir de CookieContainer. Lorsque AllowCookies a la valeur False, vous pouvez extraire manuellement les cookies à l'aide de OperationContext et les envoyer dans d'autres requêtes à l'aide d'un autre OperationContext ou d'un inspecteur de message. L'interface IHttpCookieContainerManager vous permet d'authentifier un utilisateur avec un service et d'utiliser le cookie d'authentification retourné par ce service pour l'authentifier auprès d'autres services.