Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Fonctionnalités de simplification de WCF

.NET Framework 4.5

Cette rubrique décrit les nouvelles fonctionnalités qui facilitent l'écriture d'applications WCF.

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.

L'exemple suivant est un fichier de configuration généré par WCF 3.0.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" 
                    hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" 
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                        maxArrayLength="16384" maxBytesPerRead="4096"
                        maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>
</configuration>

L'exemple suivant est un fichier de configuration généré par WCF 4.5.


<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>
</configuration>

WCF prend désormais en charge le développement Contrat en premier. L'outil svcutl.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.

Les projets portables du sous-ensemble permettent aux programmeurs d'assembly .NET de maintenir une arborescence source unique et le système de génération tout en prenant en charge plusieurs plateformes .NET (de bureau, Silverlight, Windows Phone et XBOX). Les projets portables du sous-ensemble référencent uniquement les bibliothèques portables .NET qui sont un assembly .NET Framework pouvant être utilisé sur toute plateforme principale .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, consultezAjouter une référence de service à un projet de sous-ensemble portable.

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 affecter la valeur True à l'attribut aspNetCompatibilityEnabled dans la section <serviceHostingEnvironment> du fichier web.config. De plus, la propriété RequirementsMode de tout service dans cet appDomain sur son AspNetCompatibilityRequirementsAttribute doit avoir la valeur Allowed ou Required. Par défaut AspNetCompatibilityRequirementsAttribute a désormais la valeur Allowed et le modèle par défaut d'application de service WCF affecte la valeur true à l'attribut aspNetCompatibilityEnabled. Pour plus d'informations, consultezNouveautés dans Windows Communication Foundation 4.5 et Services WCF et ASP.NET.

  • La prise en charge de la diffusion en continu asynchrone a été ajoutée à WCF. Pour activer la diffusion en continu asynchrone, ajoutez le comportement de point de terminaison DispatcherSynchronizationBehavior à l'hôte de service et affectez à sa propriété AsynchronousSendEnabled la valeur true. L'extensibilité peut en tirer parti lorsqu'un service envoie des messages transmis en continu à plusieurs clients qui les lisent lentement. WCF ne bloque plus un thread par client et libère le thread pour prendre en charge un autre client.

  • Limitations supprimées concernant la mise en mémoire tampon des messages lorsqu'un service est hébergé par IIS. Dans les versions antérieures de WCF, lors de la réception d'un message pour un service hébergé par IIS qui utilisait le transfert de message en continu, ASP.NET plaçait le message entier en mémoire tampon avant de l'envoyer à WCF. Cela entraînait une grande consommation de mémoire. Cette mise en mémoire tampon a été supprimée dans .NET 4.5 et désormais les services WCF hébergés par IIS peuvent traiter le flux entrant avant que le message entier n'ait été reçu, ce qui permet une réelle diffusion en continu. Cela permet à WCF de répondre immédiatement aux messages et améliore les performances. En outre, vous n'avez plus besoin de spécifier une valeur pour maxRequestLength, la limite de taille ASP.NET sur les requêtes entrantes. Si cette propriété est définie, elle est ignorée. Pour plus d'informations surmaxRequestLength, consultez élément de configuration <httpRuntime>. Vous devez toujours configurer le maxAllowedContentLength, Pour plus d'informations, consultezLimites de demande IIS.

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

Property

On

Nouvelle valeur par défaut

Informations supplémentaires

channelInitializationTimeout

NetTcpBinding

30 secondes

Cette propriété détermine la durée d'authentification d'une connexion TCP à l'aide du protocole .Net Framing. Un client doit envoyer des données initiales avant que le serveur dispose de suffisamment d'informations pour exécuter l'authentification. Ce délai d'attente est volontairement plus petit que le ReceiveTimeout (10 minutes) afin que les clients non authentifiés malveillants ne conservent pas longtemps les connexions occupées au serveur. La valeur par défaut est de 30 secondes. Pour plus d'informations, consultezChannelInitializationTimeout

listenBacklog

NetTcpBinding

16 * nombre de processeurs

Cette propriété de niveau socket décrit le nombre de demandes en "attente d'acceptation" à mettre en file d'attente. Si la file d'attente de backlog d'écoute est remplie, les nouvelles demandes de socket sont rejetées. Pour plus d'informations, consultezListenBacklog

maxPendingAccepts

ConnectionOrientedTransportBindingElement

SMSvcHost.exe

2 * nombre de processeurs pour le transport

4 * nombre de processeurs pour SMSvcHost.exe

Cette propriété limite le nombre de canaux que le serveur peut avoir en attente sur un écouteur. Lorsque MaxPendingAccepts est trop bas, il y a un petit intervalle de temps pendant lequel tous les canaux en attente démarrent les connexions de service, mais aucun nouveau canal ne démarre d'écoute. Une connexion peut se produire pendant cet intervalle et échouera, car aucun élément ne l'attend sur le serveur. Cette propriété peut être configurée en affectant un plus grand nombre à la propriété MaxPendingConnections. Pour plus d'informations, consultez.MaxPendingAccepts et Configuration du service de partage de ports Net.TCP

maxPendingConnections

ConnectionOrientedTransportBindingElement

12 * nombre de processeurs

Cette propriété détermine le nombre de connexions acceptées par un transport, mais non choisies par le répartiteur ServiceModel. Pour définir cette valeur, utilisez MaxConnections sur la liaison ou maxOutboundConnectionsPerEndpoint sur l'élément de liaison. Pour plus d'informations, consultezMaxPendingConnections

receiveTimeout

SMSvcHost.exe

30 secondes

Cette propriété spécifie le délai d'attente pour lire les données d'encadrement TCP et effectuer la distribution de la connexion à partir des connexions sous-jacentes. Elle permet de limiter la durée pendant laquelle le service SMSvcHost.exe prend part à la lecture des données de préambule d'une connexion entrante. Pour plus d'informations, consultezConfiguration du service de partage de ports Net.TCP.

Remarque Remarque

Ces nouvelles valeurs par défaut sont utilisées uniquement si vous déployez le service WCF sur un ordinateur avec le .NET Framework 4.5. Si vous déployez le même service sur un ordinateur avec le .NET Framework 4.0, les valeurs par défaut du .NET Framework 4.0 sont utilisées. Dans ce cas, il est recommandé de configurer ces paramètres explicitement.

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. Le quota MaxReceivedMessageSize n'a pas été modifié afin qu'il puisse toujours limiter la consommation de mémoire, ce qui vous évite d'avoir à gérer la complexité de XmlDictionaryReaderQuotas. Le tableau suivant contient les quotas, leurs nouvelles valeurs par défaut et une brève explication de leur utilisation.

Nom du quota

Valeur par défaut

Description

MaxArrayLength

Int32.MaxValue

Obtient et définit la longueur maximale de tableau autorisée. Ce quota limite la taille maximale d'un tableau de primitives que le lecteur XML renvoie, notamment un tableau d'octets. Ce quota ne limite pas la consommation de mémoire dans le lecteur XML lui-même, mais dans le composant qui utilise le lecteur. Par exemple, lorsque DataContractSerializer utilise un lecteur sécurisé avec MaxArrayLength, il ne désérialise pas les tableaux d'octets supérieurs à ce quota.

MaxBytesPerRead

Int32.MaxValue

Obtient et définit le nombre maximal d'octets autorisés retournés pour chaque lecture. Ce quota limite le nombre d'octets lus dans une seule opération de lecture lors de la lecture de la balise de début d'élément et ses attributs. (Dans les cas non diffusés en continu, le nom de l'élément lui-même n'est pas compté dans le quota.) Un nombre trop élevé d'attributs XML risque d'utiliser un temps de traitement disproportionné parce que le caractère unique des noms d'attributs doit être vérifié. MaxBytesPerRead atténue cette menace.

MaxDepth

128 nœuds

Ce quota limite la profondeur d'imbrication maximale des éléments XML. MaxDepth interagit avec MaxBytesPerRead : le lecteur conserve toujours des données en mémoire pour l'élément actuel et tous ses ancêtres, donc la consommation de mémoire maximale du lecteur est proportionnelle au produit de ces deux paramètres. Lors de la désérialisation d'un graphique d'objets très imbriqué, le désérialiseur est obligé d'accéder à la pile entière et de lever une exception StackOverflowException irrécupérable. Une corrélation directe existe entre l'imbrication XML et l'imbrication d'objets pour DataContractSerializer et XmlSerializer. MaxDepth permet d'atténuer cette menace.

MaxNameTableCharCount

Int32.MaxValue

Ce quota limite le nombre maximal de caractères autorisés dans un nametable. Le nametable contient certaines chaînes (telles que des espaces de noms et des préfixes) rencontrées lors du traitement d'un document XML. Étant donné que ces chaînes sont mises en mémoire tampon, ce quota permet d'empêcher une mise en mémoire tampon excessive lorsqu'une diffusion en continu est prévue.

MaxStringContentLength

Int32.MaxValue

Ce quota limite la taille maximale de la chaîne que le lecteur XML renvoie. Ce quota ne limite pas la consommation de mémoire dans le lecteur XML lui-même, mais dans le composant qui utilise le lecteur. Par exemple, lorsque DataContractSerializer utilise un lecteur sécurisé avec MaxStringContentLength, il ne désérialise pas les chaînes supérieures à ce quota.

Remarque importante Important

Pour plus d'informations sur la sécurisation de vos données, consultez « Utilisation du XML en toute sécurité » sous Considérations sur la sécurité des données.

Remarque Remarque

Ces nouvelles valeurs par défaut sont utilisées uniquement si vous déployez le service WCF sur un ordinateur avec le .NET Framework 4.5. Si vous déployez le même service sur un ordinateur avec le .NET Framework 4.0, les valeurs par défaut du .NET Framework 4.0 sont utilisées. Dans ce cas, il est recommandé de configurer ces paramètres explicitement.

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

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.

  1. Permet à un seul point de terminaison WCF de répondre à différents modes d'authentification.

  2. Permet aux paramètres de sécurité d'un service WCF d'être contrôlés par IIS

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft