Procedura: scegliere tra richieste HTTP POST e HTTP GET per gli endpoint ASP.NET AJAXHow to: Choose between HTTP POST and HTTP GET requests for ASP.NET AJAX Endpoints

Windows Communication Foundation (WCF) consente di creare un servizio che espone un endpoint ASP.NET compatibile con AJAX che può essere chiamato da JavaScript su un sito Web client.Windows Communication Foundation (WCF) allows you to create a service that exposes an ASP.NET AJAX-enabled endpoint that can be called from JavaScript on a client Web site. Le procedure di base per la compilazione di tali servizi è descritta nella come: utilizzare la configurazione per aggiungere un Endpoint ASP.NET AJAX e procedura: aggiungere un ASP.NET AJAX senza utilizzando configurazione dell'Endpoint.The basic procedures for building such services is discussed in How to: Use Configuration to Add an ASP.NET AJAX Endpoint and How to: Add an ASP.NET AJAX Endpoint Without Using Configuration.

ASP.NET AJAX supporta operazioni che usano verbi HTTP POST e HTTP GET, con HTTP POST come impostazione predefinita.ASP.NET AJAX supports operations that use the HTTP POST and HTTP GET verbs, with HTTP POST being the default. Quando si crea un'operazione che non ha effetti collaterali e restituisce dati che non vengono mai modificati o vengono modificati solo di rado, usare HTTP GET.When creating an operation that has no side effects and returns data that rarely or never changes, use HTTP GET instead. I risultati delle operazioni GET possono essere memorizzati nella cache, il che significa che più chiamate alla stessa operazione possono produrre una sola richiesta al servizio.Results of GET operations can be cached, which means that multiple calls to the same operation may result in only one request to your service. La memorizzazione nella cache non viene eseguita da WCF, ma può verificarsi a qualsiasi livello (nel browser dell'utente, in un server proxy e gli altri livelli.) La memorizzazione nella cache è vantaggiosa se si desidera migliorare le prestazioni del servizio, ma potrebbe non essere accettabile se i dati vengono modificati di frequente o se l'operazione esegue azioni.The caching is not done by WCF but can take place at any level (in a user's browser, on a proxy server, and other levels.) Caching is advantageous if you want to increase service performance, but may not be acceptable if data changes frequently or if the operation performs some action.

Ad esempio, se si sta progettando un servizio per gestire il catalogo musicale di un utente, un'operazione che ricerca l'artista in base al titolo di un album trae vantaggio dall'utilizzo di GET, ma un'operazione che aggiunge un album alla raccolta personale dell'utente deve usare POST.For example, if you are designing service to manage a user's music library, an operation that looks up the artist based on an album's title benefits from using GET, but an operation that adds an album to the user's personal collection must use POST.

Per controllare la durata della cache, usare il tipo OutgoingWebResponseContext.To control the lifetime of the cache, use the OutgoingWebResponseContext type. Ad esempio, quando si progetta un servizio che restituisce previsioni meteorologiche aggiornate ogni ora, si utilizzerà GET limitando però la durata della cache a massimo un'ora, per impedire agli utenti del servizio di accedere a dati non aggiornati.For example, when designing a service that returns weather forecasts updated hourly, you would use GET but limit the cache duration to an hour or less to prevent the users of the service from accessing stale data.

Quando si usano servizi da una pagina ASP.NET AJAX che usano il controllo Script Manager, non c'è alcuna differenza se l'operazione usa GET o POST, il meccanismo di gestione degli script assicura che venga emesso il tipo di richiesta corretto.When using services from an ASP.NET AJAX page that use the Script Manager control, it makes no difference whether the operation uses GET or POST - the script manager mechanism ensures that the correct request type is issued.

Le operazioni HTTP GET usano qualsiasi parametro di input supportato dalle operazioni POST, inclusi i tipi di contratto dati complessi.HTTP GET operations use any input parameters supported by POST operations, including complex data contract types. Tuttavia, nella maggior parte dei casi è consigliabile evitare di usare troppi parametri o parametri troppo complessi nelle operazioni GET, per non ridurre l'efficienza della memorizzazione nella cache.However, in most cases it is recommended to avoid too many parameters or parameters that are too complex in GET operations because it reduces caching efficiency.

In questo argomento viene illustrato come scegliere tra GET e POST aggiungendo gli attributi WebGetAttribute o WebInvokeAttribute alle operazioni pertinenti nel contratto di servizio.This topic demonstrates how to select between GET and POST by adding the WebGetAttribute or WebInvokeAttribute attributes to the relevant operations in the service contract. Gli altri passaggi (per implementare, configurare e ospitare il servizio) che sono necessarie per ottenere il servizio in esecuzione sono simili a quelli utilizzati da qualsiasi servizio ASP.NET AJAX in WCF.The other steps (to implement, configure and host the service) that are required to get the service running are similar to those used by any ASP.NET AJAX service in WCF.

Un'operazione contrassegnata da WebGetAttribute usa sempre una richiesta GET.An operation marked with the WebGetAttribute always uses a GET request. Un'operazione contrassegnata da WebInvokeAttribute o non contrassegnata da nessuno dei due attributi, usa una richiesta POST.An operation marked with the WebInvokeAttribute, or not marked with any of the two attributes, uses a POST request. WebInvokeAttribute consente di usare altri verbi HTTP, diversi da GET e POST, quali PUT e DELETE, tramite la proprietà Method.The WebInvokeAttribute allows the use of other HTTP verbs, other than GET and POST (such as PUT and DELETE) through the Method property. Tuttavia, questi verbi non sono supportati da ASP.NET AJAX.However, these verbs are not supported by ASP.NET AJAX. Se si intende usare il servizio da pagine ASP.NET che usano il controllo Script Manager, non usare la proprietà Method.If you intend to use the service from ASP.NET pages using the Script Manager control, do not use the Method property.

Per un esempio funzionante di commutazione a GET, vedere il servizio AJAX di base esempio.For a working example of switching to GET, see the Basic AJAX Service sample.

Per un esempio che usa POST, vedere il servizio AJAX con HTTP POST esempio.For a sample that uses POST, see the AJAX Service Using HTTP POST sample.

Per creare un servizio WCF che risponde a richieste HTTP GET o HTTP POSTTo create a WCF service that responds to HTTP GET or HTTP POST requests

  1. Definire un contratto di servizio WCF base con un'interfaccia contrassegnata con il ServiceContractAttribute attributo.Define a basic WCF service contract with an interface marked with the ServiceContractAttribute attribute. Contrassegnare ogni operazione con OperationContractAttribute.Mark each operation with the OperationContractAttribute. Aggiungere l'attributo WebGetAttribute per stabilire che un'operazione deve rispondere a richieste HTTP GET.Add the WebGetAttribute attribute to stipulate that an operation should respond to HTTP GET requests. È inoltre possibile aggiungere l'attributo WebInvokeAttribute per specificare esplicitamente HTTP POST o non specificare alcun attributo e scegliere quindi HTTP POST per impostazione predefinita.You can also add the WebInvokeAttribute attribute to explicitly specify HTTP POST, or not specify an attribute, which defaults to 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. Implementare il contratto di servizio IMusicService con MusicService.Implement the IMusicService service contract with a MusicService.

    public class MusicService : IMusicService  
    {  
        public void AddAlbum(string user, string album)  
        {  
            //Add implementation here.  
        }  
    
         //Other operations omitted…  
    }  
    
  3. Creare un nuovo file denominato "file del servizio" con estensione svc nell'applicazione.Create a new file named service with a .svc extension in the application. Modificare il file aggiungendo appropriata @ServiceHost informazioni direttive per il servizio.Edit this file by adding the appropriate @ServiceHost directive information for the service. Specificare che il WebScriptServiceHostFactory deve essere usata nel @ServiceHost direttiva per configurare automaticamente un endpoint ASP.NET AJAX.Specify that the WebScriptServiceHostFactory is to be used in the @ServiceHost directive to automatically configure an ASP.NET AJAX endpoint.

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

Per chiamare il servizioTo call the service

  1. È possibile testare le operazioni GET del servizio senza alcun codice client, usando il browser.You can test your service's GET operations without any client code, by using the browser. Se, ad esempio, il servizio è configurato il "http://example.com/service.svc"indirizzo, quindi digitando"http://example.com/service.svc/LookUpArtist?album=SomeAlbum" nel browser sulla barra degli indirizzi richiama il servizio e fa sì che la risposta essere scaricato o visualizzata.For example, if your service is configured at the "http://example.com/service.svc" address, then typing "http://example.com/service.svc/LookUpArtist?album=SomeAlbum" into the browser address bar invokes the service and causes the response to be downloaded or displayed.

  2. È possibile usare servizi con operazioni GET esattamente come qualsiasi altro servizio ASP.NET AJAX, immettendo l'URL del servizio nella raccolta degli script del controllo Script Manager ASP.NET AJAX.You can use services with GET operations in the same way as any other ASP.NET AJAX services - by entering the service URL into the Scripts collection of the ASP.NET AJAX Script Manager control. Per un esempio, vedere il servizio AJAX di base.For an example, see the Basic AJAX Service.

Vedere ancheSee Also

Creazione di servizi WCF per ASP.NET AJAXCreating WCF Services for ASP.NET AJAX
Procedura: Eseguire la migrazione di servizi Web ASP.NET abilitati AJAX in WCFHow to: Migrate AJAX-Enabled ASP.NET Web Services to WCF