Instrukcje: Wybieranie między żądaniami HTTP POST i HTTP GET dla punktów końcowych AJAX ASP.NET

Program Windows Communication Foundation (WCF) umożliwia utworzenie usługi, która uwidacznia ASP.NET punkt końcowy z obsługą technologii AJAX, który można wywołać z języka JavaScript w witrynie sieci Web klienta. Podstawowe procedury tworzenia takich usług zostały omówione w temacie How to: Use Configuration to Add an ASP.NET AJAX Endpoint and How to: Add an ASP.NET AJAX Endpoint Without Using Configuration (Jak dodać punkt końcowy AJAX ASP.NET bez używania konfiguracji).

ASP.NET AJAX obsługuje operacje korzystające z czasowników HTTP POST i HTTP GET, a wartość domyślna to HTTP POST. Podczas tworzenia operacji, która nie ma skutków ubocznych i zwraca dane, które rzadko lub nigdy się nie zmieniają, należy zamiast tego użyć protokołu HTTP GET. Wyniki operacji GET można buforować, co oznacza, że wiele wywołań tej samej operacji może spowodować tylko jedno żądanie do usługi. Buforowanie nie jest wykonywane przez usługę WCF, ale może odbywać się na dowolnym poziomie (w przeglądarce użytkownika, na serwerze proxy i na innych poziomach). Buforowanie jest korzystne, jeśli chcesz zwiększyć wydajność usługi, ale może nie być akceptowalne, jeśli dane zmieniają się często lub jeśli operacja wykonuje jakąś akcję.

Jeśli na przykład projektujesz usługę do zarządzania biblioteką muzyczną użytkownika, operacja, która wyszukuje artystę na podstawie tytułu albumu korzyści z używania get, ale operacja, która dodaje album do osobistej kolekcji użytkownika, musi używać post.

Aby kontrolować okres istnienia pamięci podręcznej, użyj OutgoingWebResponseContext typu . Na przykład podczas projektowania usługi, która zwraca prognozy pogody zaktualizowane co godzinę, należy użyć funkcji GET, ale ograniczyć czas trwania pamięci podręcznej do godziny lub mniej, aby uniemożliwić użytkownikom usługi uzyskiwanie dostępu do nieaktualnych danych.

W przypadku korzystania z usług ze strony ASP.NET AJAX korzystającej z kontrolki Menedżer skryptów nie ma znaczenia, czy operacja używa metody GET lub POST — mechanizm menedżera skryptów zapewnia, że jest wystawiany prawidłowy typ żądania.

Operacje HTTP GET używają dowolnych parametrów wejściowych obsługiwanych przez operacje POST, w tym złożonych typów kontraktów danych. Jednak w większości przypadków zaleca się unikanie zbyt wielu parametrów lub parametrów, które są zbyt złożone w operacjach GET, ponieważ zmniejsza wydajność buforowania.

W tym temacie pokazano, jak wybrać metodę GET i POST, dodając WebGetAttribute atrybuty lub WebInvokeAttribute do odpowiednich operacji w kontrakcie usługi. Inne kroki (aby zaimplementować, skonfigurować i hostować usługę), które są wymagane do uruchomienia usługi, są podobne do tych używanych przez dowolną usługę AJAX ASP.NET w programie WCF.

Operacja oznaczona zawsze WebGetAttribute używa żądania GET. Operacja oznaczona znakiem WebInvokeAttribute, lub nie oznaczona żadnym z tych dwóch atrybutów, używa żądania POST. Obiekt WebInvokeAttribute umożliwia używanie innych czasowników HTTP innych niż GET i POST (takich jak PUT i DELETE) za pośrednictwem Method właściwości . Te czasowniki nie są jednak obsługiwane przez ASP.NET AJAX. Jeśli zamierzasz używać usługi z ASP.NET stron przy użyciu kontrolki Menedżer skryptów, nie używaj Method właściwości .

Aby zapoznać się z roboczym przykładem przełączania do metody GET, zobacz przykład Podstawowa usługa AJAX.

Aby zapoznać się z przykładem korzystającym z funkcji POST, zobacz przykład AJAX Service Using HTTP POST (Usługa AJAX using HTTP POST ).

Aby utworzyć usługę WCF, która odpowiada na żądania HTTP GET lub HTTP POST

  1. Zdefiniuj podstawowy kontrakt usługi WCF z interfejsem oznaczonym atrybutem ServiceContractAttribute . Oznacz każdą operację za pomocą .OperationContractAttribute WebGetAttribute Dodaj atrybut, aby określić, że operacja powinna odpowiadać na żądania HTTP GET. Możesz również dodać atrybut w WebInvokeAttribute celu jawnego określenia żądania HTTP POST lub nie określić atrybutu, który domyślnie ma wartość 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. Zaimplementuj IMusicService kontrakt usługi za pomocą polecenia MusicService.

    public class MusicService : IMusicService  
    {  
        public void AddAlbum(string user, string album)  
        {  
            //Add implementation here.  
        }  
    
         //Other operations omitted…  
    }  
    
  3. Utwórz nowy plik o nazwie service z rozszerzeniem svc w aplikacji. Edytuj ten plik, dodając odpowiednie informacje o dyrektywie @ServiceHost dla usługi. Określ, że element WebScriptServiceHostFactory ma być używany w dyrektywie @ServiceHost w celu automatycznego konfigurowania punktu końcowego ASP.NET AJAX.

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

Aby wywołać usługę

  1. Operacje GET usługi można przetestować bez żadnego kodu klienta, korzystając z przeglądarki. Jeśli na przykład usługa jest skonfigurowana pod http://example.com/service.svc adresem, wpisanie http://example.com/service.svc/LookUpArtist?album=SomeAlbum na pasku adresu przeglądarki wywołuje usługę i powoduje pobranie lub wyświetlenie odpowiedzi.

  2. Usługi z operacjami GET można używać w taki sam sposób, jak w przypadku innych usług ASP.NET AJAX — wprowadzając adres URL usługi do kolekcji Skrypty kontrolki ASP.NET AJAX Script Manager. Aby zapoznać się z przykładem, zobacz podstawową usługę AJAX.

Zobacz też