Partager via


Procédure : choisir entre les requêtes HTTP POST et HTTP GET pour les points de terminaison AJAX ASP.NET

Windows Communication Foundation (WCF) vous permet de créer un service qui expose un point de terminaison compatible ASP.NET AJAX et pouvant être appelé à partir de JavaScript sur un site web client. Les procédures de base pour la création de tels services sont décrites dans Guide pratique pour utiliser la configuration pour ajouter un point de terminaison AJAX ASP.NET et Guide pratique pour ajouter un point de terminaison AJAX ASP.NET sans utiliser de configuration.

ASP.NET AJAX prend en charge des opérations utilisant les verbes HTTP POST et HTTP GET, avec HTTP POST comme valeur par défaut. Lors de la création d'une opération qui n'a pas d'effets secondaires et qui retourne des données qui changent rarement, voire jamais, utilisez HTTP GET à la place. Les résultats des opérations GET peuvent être mis en cache, ce qui signifie que les conversations multiples vers la même opération peuvent aboutir à une seule demande à votre service. La mise en cache n’est pas effectuée par WCF, mais peut avoir lieu à tout niveau (dans le navigateur d’un utilisateur, sur un serveur proxy et à d’autres niveaux). La mise en cache est avantageuse si vous souhaitez améliorer les performances du service, mais peut ne pas être appropriée si les données changent fréquemment ou si l’opération effectue une action.

Par exemple, si vous destinez le service à la gestion de la médiathèque d’un utilisateur, une opération qui recherche les artistes par titre d’album peut utiliser avantageusement GET, mais une opération qui ajoute un album à la collection personnelle de l’utilisateur doit utiliser POST.

Pour contrôler la durée de vie du cache, utilisez le type OutgoingWebResponseContext. Par exemple, lorsque vous concevez un service qui retourne des prévisions météorologiques mises à jour toutes les heures, vous pouvez utiliser GET mais il convient de limiter la durée de mise en cache à une heure ou moins pour éviter que les utilisateurs du service accèdent à des données périmées.

Lors de l'utilisation de services à partir d'une page ASP.NET AJAX utilisant le contrôle Script Manager ASP.Net AJAX, c'est égal si les opérations utilisent GET ou POST, le mécanisme du gestionnaire de script garantit que le type de demande correct est publié.

Les opérations HTTP GET utilisent tous les paramètres d'entrée pris en charge par les opérations POST, y compris les types de contrat de données complexes. Toutefois, il est recommandé dans la plupart des cas d'éviter un trop grand nombre de paramètres ou des paramètres trop complexes dans les opérations GET parce que cela réduit l'efficacité de la mise en cache.

Cette rubrique explique comment sélectionner GET et POST en ajoutant les attributs WebGetAttribute ou WebInvokeAttribute aux opérations pertinentes dans le contrat de service. Les autres étapes requises pour rendre le service opérationnel (implémentation, configuration et hébergement du service) sont semblables à celles utilisées par tout service AJAX ASP.NET dans WCF.

Une opération marquée avec WebGetAttribute utilise toujours une demande GET. Une opération marquée avec WebInvokeAttribute ou une opération qu n'est marquée avec aucun des deux attributs, utilise une demande POST. WebInvokeAttribute autorise l'utilisation de verbes HTTP autres que GET et POST (tels que PUT et DELETE) à travers la propriété Method. Toutefois, ces verbes ne sont pas pris en charge par ASP.NET AJAX. Si vous projetez d'utiliser le service à partir des pages ASP.NET à l'aide du contrôle Script Manager ASP.Net AJAX, n'utilisez pas la propriété Method.

Pour voir un exemple opérationnel de sélection de GET, consultez l'exemple Service AJAX de base.

Pour obtenir un exemple qui utilise POST, consultez l’exemple Service AJAX utilisant HTTP POST.

Pour créer un service WCF qui répond aux demandes HTTP GET ou HTTP POST

  1. Définissez un contrat de service WCF de base avec une interface marquée avec l’attribut ServiceContractAttribute. Marquez chaque opération avec OperationContractAttribute. Ajoutez l'attribut WebGetAttribute pour stipuler qu'une opération doit répondre aux demandes HTTP GET. Vous pouvez également ajouter l'attribut WebInvokeAttribute pour spécifier explicitement HTTP POST ou ne pas spécifier d'attribut, dans ce cas la valeur par défaut est HTTP POST.

    [ServiceContract]  
    public interface IMusicService  
    {  
        //This operation uses a GET method.  
        [OperationContract]  
        [WebGet]  
        string LookUpArtist(string album);  
    
        //This operation will use a POST method.  
        [OperationContract]  
        [WebInvoke]  
        void AddAlbum(string user, string album);  
    
        //This operation will use POST method by default  
        //since nothing else is explicitly specified.  
        [OperationContract]  
        string[] GetAlbums(string user);  
    
        //Other operations omitted…  
    
    }  
    
  2. Implémentez le contrat de service IMusicService avec un MusicService.

    public class MusicService : IMusicService  
    {  
        public void AddAlbum(string user, string album)  
        {  
            //Add implementation here.  
        }  
    
         //Other operations omitted…  
    }  
    
  3. Créez un nouveau fichier pour le service avec une extension .svc dans l'application. Modifiez ce fichier en ajoutant les informations appropriées de la directive @ServiceHost pour le service. Spécifiez que WebScriptServiceHostFactory sera utilisé dans la directive @ServiceHost pour configurer automatiquement un point de terminaison AJAX ASP.NET.

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

Pour appeler le service

  1. Vous pouvez tester les opérations GET de votre service sans aucun code client, en utilisant le navigateur. Par exemple, si votre service est configuré à l'adresse http://example.com/service.svc, en tapant http://example.com/service.svc/LookUpArtist?album=SomeAlbum dans la barre d'adresse du navigateur, vous appelez le service, et la réponse est téléchargée ou affichée.

  2. Vous pouvez utiliser les services avec les opérations GET de la même façon que tous les autres services ASP.NET AJAX, en tapant l’URL du service dans la collection Scripts du contrôle Script Manager ASP.NET AJAX. Pour obtenir un exemple, consultez Service AJAX de base.

Voir aussi