Vue d’ensemble du modèle de programmation HTTP web WCF
Le modèle de programmation HTTP WEB Windows Communication Foundation (WCF) fournit les éléments de base requis pour générer des services HTTP WEB avec WCF. Les services HTTP WEB WCF sont conçus pour être accessibles par le plus large éventail de clients possibles, notamment les navigateurs web et ont les exigences uniques suivantes :
URIs et traitement des URIs Les URIs jouent un rôle central dans la conception des services HTTP Web. Le modèle de programmation HTTP WEB WCF utilise les classes UriTemplate et UriTemplateTable pour fournir des fonctionnalités de traitement d’URI.
Prise en charge des opérations GET et POST Les services HTTP Web utilisent le verbe GET pour l’extraction de données, en plus de divers verbes d’appel pour la modification de données et l'appel distant. Le modèle de programmation WCF WEB HTTP utilise les WebGetAttribute et les WebInvokeAttribute pour associer des opérations de service à GET et à d'autres verbes HTTP tels que PUT, POST et DELETE.
Plusieurs formats de données services de style Web traitent de nombreux types de données en plus des messages SOAP. Le modèle de programmation HTTP WEB WCF utilise les WebHttpBinding et les WebHttpBehavior pour prendre en charge de nombreux formats de données différents, notamment les documents XML, l’objet de données JSON et les flux de contenu binaire, tels que des images, des fichiers vidéo ou du texte brut.
Le modèle de programmation HTTP WEB WCF étend la portée de WCF pour couvrir les scénarios de style web qui incluent les services HTTP WEB, les services AJAX et JSON et les flux de syndication (ATOM/RSS). Pour plus d’informations sur les services AJAX et JSON, consultez Intégration AJAX et prise en charge JSON. Pour plus d’informations sur la syndication, consultez Vue d’ensemble de la syndication WCF.
Il n’existe aucune restriction supplémentaire sur les types de données qui peuvent être retournés à partir d’un service HTTP WEB. Tout type sérialisable peut être retourné à partir d’une opération de service HTTP WEB. Étant donné que les opérations de service HTTP WEB peuvent être appelées par un navigateur web, il existe une limitation sur les types de données pouvant être spécifiés dans une URL. Pour plus d'informations sur les types pris en charge par défaut, consultez la section UriTemplate Paramètres de chaîne de requête et URL ci-dessous. Le comportement par défaut peut être modifié en fournissant votre propre implémentation T :System.ServiceModel.Dispatcher.QueryStringConverter qui spécifie comment convertir les paramètres spécifiés dans une URL en type de paramètre réel. Pour plus d’informations, consultez QueryStringConverter
Attention
Les services écrits avec le modèle de programmation HTTP WEB WCF n’utilisent pas de messages SOAP. Comme SOAP n’est pas utilisé, les fonctionnalités de sécurité fournies par WCF ne peuvent pas être utilisées. Toutefois, vous pouvez utiliser la sécurité basée sur le transport en hébergeant votre service avec HTTPS. Pour plus d’informations sur la sécurité WCF, consultez Vue d’ensemble de la sécurité.
Avertissement
L’installation de l’extension WebDAV pour IIS peut entraîner le retour d’une erreur HTTP 405 à mesure que l’extension WebDAV tente de gérer toutes les requêtes PUT. Pour contourner ce problème, vous pouvez désinstaller l’extension WebDAV ou désactiver l’extension WebDAV pour votre site web. Pour plus d’informations, consultez IIS et WebDav.
Traitement d’URI avec UriTemplate et UriTemplateTable
Les modèles d’URI fournissent une syntaxe efficace pour exprimer de grands ensembles d’URI structurellement similaires. Par exemple, le modèle suivant exprime l’ensemble des URI de trois segments qui commencent par « a » et se terminent par « c » sans tenir compte de la valeur du segment intermédiaire : a/{segment}/c
Ce modèle décrit les URI comme suit :
a/x/c
a/y/c
a/z/c
et ainsi de suite.
Dans ce modèle, la notation d’accolades (« {segment} ») indique un segment variable au lieu d’une valeur littérale.
.NET Framework fournit une API permettant d’utiliser des modèles d’URI appelés UriTemplate. UriTemplates
vous permet d’effectuer les opérations suivantes :
Vous pouvez appeler l’une des méthodes
Bind
avec un ensemble de paramètres pour produire un URI entièrement fermé qui correspond au modèle. Cela signifie que toutes les variables dans le modèle d’URI sont remplacées par des valeurs réelles.Vous pouvez appeler
Match
() avec un URI candidat, qui utilise un modèle pour décomposer un URI candidat dans ses parties constituantes et retourne un dictionnaire qui contient les différentes parties de l’URI étiqueté en fonction des variables du modèle.Bind
() etMatch
() sont inverses afin que vous puissiez appelerMatch
(Bind
( x ) et revenir avec le même environnement que celui avec lequel vous avez commencé.
Il y a de nombreuses situations (en particulier sur le serveur, où l'acheminement d'une requête vers une opération de service basée sur l'URI est nécessaire) où vous souhaitez suivre un ensemble d'objets UriTemplate dans une structure de données capable d'accéder indépendamment à chacun des modèles contenus. UriTemplateTable représente un ensemble de modèles d’URI et sélectionne la meilleure correspondance en fonction d’un ensemble de modèles et d’un URI candidat. Ceci n’est lié à aucune pile de mise en réseau particulière (WCF incluse), vous pouvez donc l’utiliser partout où cela est nécessaire.
Le modèle de service WCF utilise UriTemplate et UriTemplateTable pour associer des opérations de service à un ensemble d’URI décrits par un UriTemplate. Une opération de service est associée à un UriTemplate, à l’aide de l'WebGetAttribute ou du WebInvokeAttribute. Pour plus d’informations sur UriTemplate et UriTemplateTable, consultez UriTemplate et UriTemplateTable.
Attributs WebGet et WebInvoke
Les services HTTP WEB WCF utilisent des verbes de récupération (par exemple HTTP GET) en plus de différents verbes d’appel (par exemple HTTP POST, PUT et DELETE). Le modèle de programmation HTTP WEB WCF permet aux développeurs de services de contrôler le modèle d’URI et le verbe associé à leurs opérations de service avec les WebGetAttribute et les WebInvokeAttribute. Les WebGetAttribute et les WebInvokeAttribute vous permettent de contrôler la façon dont les opérations individuelles sont liées aux URI et aux méthodes HTTP associées à ces URI. Par exemple, en ajoutant WebGetAttribute et WebInvokeAttribute dans le code suivant.
[ServiceContract]
interface ICustomer
{
//"View It"
[WebGet]
Customer GetCustomer():
//"Do It"
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Le code précédent vous permet d’effectuer les requêtes HTTP suivantes.
GET /GetCustomer
POST /UpdateCustomerName
Par défaut, WebInvokeAttribute utilise POST, mais vous pouvez aussi l'utiliser pour d'autres verbes.
[ServiceContract]
interface ICustomer
{
//"View It" -> HTTP GET
[WebGet( UriTemplate="customers/{id}" )]
Customer GetCustomer( string id ):
//"Do It" -> HTTP PUT
[WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
Customer UpdateCustomer( string id, Customer newCustomer );
}
Pour obtenir un exemple complet d’un service WCF qui utilise le modèle de programmation HTTP WEB WCF, consultez How to : Create a Basic WCF Web HTTP Service.
Paramètres et URL de chaîne de requête UriTemplate
Les services de style web peuvent être appelés à partir d’un navigateur Web en tapant une URL associée à une opération de service. Ces opérations de service peuvent prendre des paramètres de chaîne de requête qui doivent être spécifiés dans un formulaire de chaîne dans l’URL. Le tableau suivant présente les types qui peuvent être passés dans une URL et le format utilisé.
Type | Format |
---|---|
Byte | 0 - 255 |
SByte | -128 - 127 |
Int16 | -32768 - 32767 |
Int32 | -2,147,483,648 - 2,147,483,647 |
Int64 | -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
UInt16 | 0 - 65535 |
UInt32 | 0 - 4,294,967,295 |
UInt64 | 0 - 18,446,744,073,709,551,615 |
Single | -3.402823e38 - 3.402823e38 (la notation d'exposant n'est pas requise) |
Double | -1.79769313486232e308 - 1.79769313486232e308 (la notation exponentielle n’est pas nécessaire) |
Char | Tout caractère unique |
Decimal | N’importe quelle décimale en notation standard (aucun exposant) |
Boolean | True ou False (ne respecte pas la casse) |
String | Toute chaîne (la chaîne Null n'est pas prise en charge et aucun échappement n'est fait) |
DateTime | MM/JJ/AAAA MM/JJ/AAAA HH:MM:SS [AM|PM] Mois Jour Année Mois Jour Année HH:MM:SS [AM|PM] |
TimeSpan | DD.HH :MM :SS Where DD = Days, HH = Hours, MM = minutes, SS = Seconds |
Guid | Un GUID, par exemple : 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
DateTimeOffset | MM/DD/YYYY HH:MM:SS MM:SS Where DD = Days, HH = Hours, MM = minutes, SS = Seconds |
Énumérations | Valeur d’énumération, par exemple, qui définit l’énumération comme indiqué dans le code suivant.public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; Toutes les valeurs d’énumération individuelles (ou leurs valeurs entières correspondantes) peuvent être spécifiées dans la chaîne de requête. |
Types qui ont un TypeConverterAttribute qui peut convertir le type vers et depuis une représentation sous forme de chaîne. |
Dépend du convertisseur de type. |
Formats et modèle de programmation HTTP WEB WCF
Le modèle de programmation HTTP WEB WCF a de nouvelles fonctionnalités pour fonctionner avec de nombreux formats de données différents. Au niveau de la couche de liaison, la WebHttpBinding peut lire et écrire les différents types de données suivants :
- XML
- JSON
- Flux binaires opaques
Cela signifie que le modèle de programmation WCF WEB HTTP peut gérer n’importe quel type de données, mais que vous pourriez être confronté à Stream.
.NET Framework 3.5 prend en charge les données JSON (AJAX) ainsi que les flux de syndication (y compris ATOM et RSS). Pour plus d’informations sur ces fonctionnalités, consultez Mise en forme HTTP Web WCF, Vue d’ensemble de la syndication WCFet Prise en charge de l’intégration AJAX et du JSON.
Modèle de programmation HTTP WCF WEB et sécurité
Étant donné que le modèle de programmation HTTP WEB WCF ne prend pas en charge les protocoles WS-*, la seule façon de sécuriser un service HTTP WEB WCF consiste à exposer le service via HTTPS à l’aide de SSL. Pour plus d’informations sur la configuration de SSL avec IIS 7.0, consultez Comment implémenter SSL dans IIS.
Résolution des problèmes liés au modèle de programmation HTTP WEB WCF
Lors de l’appel des services HTTP WEB WCF à l’aide d’un ChannelFactoryBase<TChannel> pour créer un canal, l'WebHttpBehavior utilise la EndpointAddress définie dans le fichier de configuration même si une autre EndpointAddress est passée à l'ChannelFactoryBase<TChannel>.