Partager via


Création de services AJAX WCF sans ASP.NET

Il est possible d'accéder aux services AJAX Windows Communication Foundation (WCF) à partir d'une page Web activée pour Javascript, sans recourir à ASP.NET AJAX. Cette rubrique décrit comment créer un service WCF de ce type.

Pour obtenir des instructions sur l'utilisation de WCF avec ASP.NET AJAX, consultez Création de services WCF pour ASP.NET AJAX.

La création d'un service AJAX WCF se décompose en trois parties :

  • Création d'un point de terminaison AJAX accessible à partir du navigateur

  • Création d'un contrat de service compatible AJAX

  • Accès aux services AJAX WCF

Création d'un point de terminaison AJAX

La méthode la plus simple pour activer la prise en charge d'AJAX dans un service WCF consiste à utiliser le WebServiceHostFactory dans le fichier .svc associé au service, comme l'illustre l'exemple suivant.

<%ServiceHost 
    language=c#
    Debug="true"
    Service="Microsoft.Ajax.Samples.CityService"
    Factory=System.ServiceModel.Activation.WebServiceHostFactory
%>

Vous avez également la possibilité d'utiliser une configuration pour ajouter un point de terminaison AJAX. Utilisez le WebHttpBinding sur le point de terminaison de service et configurez ce point de terminaison avec le WebHttpBehavior, comme l'illustre l'extrait de code suivant.

<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="AjaxBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="Microsoft.Ajax.Samples.CityService">
        <endpoint 
          address="ajaxEndpoint"
          behaviorConfiguration="AjaxBehavior"
          binding="webHttpBinding"
          contract="Microsoft.Ajax.Samples.ICityService" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

Pour obtenir un exemple fonctionnel, consultez AJAX Service with JSON and XML, exemple.

Création d'un contrat de service compatible AJAX

Par défaut, les contrats de service exposés sur un point de terminaison AJAX retournent les données au format XML. Qui plus est, les opérations de service sont, par défaut, accessibles par le biais des requêtes HTTP POST adressées aux URL qui incluent l'adresse du point de terminaison suivie du nom de l'opération, comme l'illustre l'exemple suivant.

    [OperationContract]
    string[] GetCities(string firstLetters);

Cette opération est accessible via une requête HTTP POST à http://serviceaddress/endpointaddress/GetCities et retourne un message XML.

Vous pouvez utiliser le modèle de programmation Web complet pour personnaliser ces aspects de base. Par exemple, vous pouvez utiliser les attributs WebGetAttribute ou WebInvokeAttribute pour contrôler le verbe HTTP auquel l'opération répond, ou vous pouvez utiliser la propriété UriTemplate de ces attributs respectifs pour spécifier des URI personnalisés. Pour plus d'informations, consultez la rubrique Modèle de programmation HTTP Web WCF.

Le format de données JSON est souvent utilisé dans les services AJAX. Pour créer une opération qui retourne des données JSON au lieu de données XML, affectez Json à la propriété ResponseFormat (ou la propriété ResponseFormat). La rubrique Sérialisation JSON autonome indique comment les types de contrats de données et les types .NET intégrés sont mappés au format JSON.

En principe, les demandes et les réponses JSON sont composées d'un seul élément. Pour l'opération GetCities précédente, la demande ressemble à l'instruction suivante.

    “na”

La réponse à cette demande ressemble à l'instruction suivante.

    [“Nairobi”, “Naples”, “Nashville”]

Si l'opération utilise un paramètre supplémentaire, le style de demande doit être encapsulé pour encapsuler les deux paramètres dans un seul objet JSON. L'exemple suivant illustre un message JSON de ce style.

    {“firstLetters”: “na”, “maxNumber”: 2}

Le contrat suivant accepte ce message.

[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)]
[OperationContract]
string[] GetCities(string firstLetters, int maxNumber);

Accès aux services AJAX

Les points de terminaison AJAX WCF acceptent systématiquement les demandes XML et JSON.

Les requêtes HTTP POST avec un type de contenu « application/json » sont traitées en tant que JSON, et celles avec un type de contenu qui indique XML (par exemple, « texte/xml ») sont traitées en tant que XML.

Les requêtes HTTP GET contiennent tous les paramètres de requête dans l'URL proprement dite.

Il revient à l'utilisateur de choisir comment créer la requête HTTP au point de terminaison. De plus, l'utilisateur dispose d'un contrôle total sur la construction du JSON qui forme le corps de la demande. Pour obtenir un exemple de la création d'une demande à partir de JavaScript, consultez AJAX Service with JSON and XML, exemple.