Modèle objet de programmation Web HTTP WCF
Le modèle de programmation Web HTTP WCF permet aux développeurs d’exposer les services web de Windows Communication Foundation (WCF) par le biais de requêtes HTTP de base sans avoir recours à SOAP. Le modèle de programmation Web HTTP WCF repose sur le modèle d’extensibilité WCF existant. Il définit les classes suivantes :
Modèle de programmation :
Infrastructure de canaux et de répartiteur :
Points d'extensibilité et classes d'utilitaire :
AspNetCacheProfileAttribute
En cas d'application à une opération de service, AspNetCacheProfileAttribute indique le profil de cache de sortie ASP.NET dans le fichier de configuration qui doit être utilisé pour mettre des réponses de l'opération dans le cache de sortie ASP .NET. Cette propriété accepte un seul paramètre, le nom de profil de cache qui spécifie les paramètres de cache dans le fichier de configuration.
WebGetAttribute
L'attribut WebGetAttribute est utilisé pour marquer une opération de service en tant qu'opération répondant aux requêtes HTTP GET. Il s'agit d'un comportement d'opération passif (les méthodes IOperationBehavior n'ont aucune action) qui ajoute des métadonnées à la description de l'opération. L’attribut WebGetAttribute n’a aucun effet à moins qu’un comportement recherchant ces métadonnées dans la description de l’opération (en particulier WebHttpBehavior) soit ajouté à la collection de comportements du service. L'attribut WebGetAttribute accepte les paramètres optionnels indiqués dans le tableau suivant :
Paramètre | Description |
---|---|
BodyStyle |
Contrôle si les demandes envoyées à l'opération de service à laquelle l'attribut est appliqué et les réponses reçues en retour doivent être encapsulées. |
RequestFormat |
Contrôle la mise en forme des messages de demande. |
ResponseFormat |
Contrôle la mise en forme des messages de réponse. |
UriTemplate |
Spécifie le modèle URI qui contrôle quelles requêtes HTTP sont mappées à l'opération de service à laquelle l'attribut est appliqué. |
WebHttpBinding
La classe WebHttpBinding intègre une prise en charge des données XML, JSON et des données binaires brutes à l'aide de WebMessageEncodingBindingElement. Elle se compose d'un HttpsTransportBindingElement, d'un HttpTransportBindingElement et d'un objet WebHttpSecurity. WebHttpBinding est conçu pour être utilisé en conjonction avec WebHttpBehavior.
WebInvokeAttribute
L'attribut WebInvokeAttribute est semblable au WebGetAttribute, mais il est utilisé pour marquer une opération de service en tant qu'opération qui répond aux requêtes HTTP autres que GET. Il s'agit d'un comportement d'opération passif (les méthodes IOperationBehavior n'ont aucune action) qui ajoute des métadonnées à la description de l'opération. L’attribut WebInvokeAttribute n’a aucun effet à moins qu’un comportement recherchant ces métadonnées dans la description de l’opération (en particulier WebHttpBehavior) soit ajouté à la collection de comportements du service.
L'attribut WebInvokeAttribute accepte les paramètres optionnels indiqués dans le tableau suivant :
Paramètre | Description |
---|---|
BodyStyle |
Contrôle si les demandes envoyées à l'opération de service à laquelle l'attribut est appliqué et les réponses reçues en retour doivent être encapsulées. |
Method |
Spécifie la méthode HTTP à laquelle l'opération de service est mappée. |
RequestFormat |
Contrôle la mise en forme des messages de demande. |
ResponseFormat |
Contrôle la mise en forme des messages de réponse. |
UriTemplate |
Spécifie le modèle URI qui contrôle quelles demandes GET sont mappées à l'opération de service à laquelle l'attribut est appliqué. |
UriTemplate
La classe UriTemplate vous permet de définir un jeu d'URI de structure similaire. Les modèles sont composés de deux parties : un chemin d’accès et une requête. Un chemin d’accès est constitué d’une série de segments délimités par une barre oblique (/). Chaque segment peut avoir une valeur littérale, une valeur variable (écrite entre accolades [{}], avec obligation de correspondre au contenu exact d'un segment) ou un caractère générique (un astérisque [*] qui correspond au reste du chemin d'accès). L'expression de requête peut être entièrement omise. Si elle est présente, elle spécifie une série non triée de paires nom/valeur. Les éléments de l’expression de requête peuvent être des paires de littéraux (?x=2) ou des paires de variables (?x={valeur}). Les valeurs non couplées ne sont pas autorisées. UriTemplate est utilisé en interne par le modèle de programmation Web HTTP WCF pour mapper des URI spécifiques ou des groupes d’URI sur des opérations de service.
UriTemplateTable
La classe UriTemplateTable représente un jeu associatif d'objets UriTemplate liés à un objet choisi par le développeur. Elle vous permet de faire correspondre les URI (Uniform Resource Identifiers) des candidats par rapport aux modèles du jeu et de récupérer les données associées aux modèles correspondants. UriTemplateTable est utilisé en interne par le modèle de programmation Web HTTP WCF pour mapper des URI spécifiques ou des groupes d’URI sur des opérations de service.
WebServiceHost
WebServiceHost étend le ServiceHost de manière à faciliter l'hébergement d'un service de style Web non-SOAP. Si WebServiceHost ne trouve aucun point de terminaison dans la description du service, il crée automatiquement un point de terminaison par défaut au niveau de l'adresse de base du service. Lors de la création d'un point de terminaison HTTP par défaut, WebServiceHost désactive également la page d'aide HTTP et la fonctionnalité WSDL (Web Services Description Language) GET afin que le point de terminaison des métadonnées n'interfère pas avec le point de terminaison HTTP par défaut. WebServiceHost garantit également que le WebHttpBinding requis soit attaché à tous les points de terminaison qui utilisent WebHttpBehavior. Enfin, WebServiceHost configure automatiquement la liaison du point de terminaison afin qu’il puisse profiter des paramètres de sécurité IIS (Internet Information Services) en cas d’utilisation dans un répertoire virtuel sécurisé.
WebServiceHostFactory
La classe WebServiceHostFactory est utilisée pour créer dynamiquement un WebServiceHost lorsqu'un service est hébergé dans les services IIS (Internet Information Services) ou WAS (Windows Process Activation Service). À la différence d'un service auto-hébergé où l'application d'hébergement instancie le WebServiceHost, les services hébergés dans les services IIS ou WAS utilisent cette classe pour créer le WebServiceHost pour ces services. La méthode CreateServiceHost(Type, Uri[]) est appelée lorsqu'une demande entrante pour le service est reçue.
WebHttpBehavior
La classe WebHttpBehavior fournit les formateurs, sélecteurs d'opération, etc. requis pour la prise en charge de service de style Web au niveau de la couche de modèle de service. Il est implémenté en tant que comportement de point de terminaison (utilisé en conjonction avec WebHttpBinding) et autorise la spécification de formateurs et de sélecteurs d'opération pour chaque point de terminaison, ce qui permet à une même implémentation de service d'exposer à la fois des points de terminaison SOAP et POX.
Extension de WebHttpBehavior
WebHttpBehavior peut être étendu à l'aide de différentes méthodes virtuelles : GetOperationSelector(ServiceEndpoint), GetReplyClientFormatter(OperationDescription, ServiceEndpoint), GetRequestClientFormatter(OperationDescription, ServiceEndpoint), GetReplyDispatchFormatter(OperationDescription, ServiceEndpoint) et GetRequestDispatchFormatter(OperationDescription, ServiceEndpoint). Les développeurs peuvent dériver une classe de WebHttpBehavior et substituer ces méthodes de manière à personnaliser le comportement par défaut.
WebScriptEnablingBehavior est un exemple d'extension de WebHttpBehavior. WebScriptEnablingBehavior permet aux points de terminaison Windows Communication Foundation (WCF) de recevoir des requêtes HTTP provenant d’un client ASP.NET AJAX basé sur un navigateur. Le service AJAX utilisant HTTP POST est un exemple d’utilisation de ce point d’extensibilité.
Avertissement
Lors de l'utilisation de WebScriptEnablingBehavior, UriTemplate ne sont pas pris en charge dans les attributs WebGetAttribute ou WebInvokeAttribute.
WebHttpDispatchOperationSelector
La classe WebHttpDispatchOperationSelector utilise les classes UriTemplate et UriTemplateTable pour distribuer les appels aux opérations de service.
Compatibilité
Le modèle de programmation WEB HTTP WCF n’utilise pas de messages basés sur SOAP et ne prend donc pas en charge les protocoles WS-*. Vous pouvez toutefois exposer le même contrat par deux points de terminaison différents, l'un utilisant SOAP et l'autre pas. Pour accéder à un exemple, consultez Guide pratique : Exposer un contrat à des clients SOAP et web.
Sécurité
Comme le modèle de programmation Web HTTP WCF ne prend pas en charge les protocoles WS-*, la seule façon de sécuriser un service web reposant sur le modèle de programmation web HTTP WCF est d’exposer ce service à l’aide de SSL. Pour plus d’informations sur la configuration de SSL avec IIS 7.0, consultez Comment implémenter SSL dans IIS.