Bagikan melalui


Cara: Memilih antara permintaan HTTP POST dan HTTP GET untuk Titik Akhir ASP.NET AJAX

Windows Communication Foundation (WCF) memungkinkan Anda membuat layanan yang mengekspos titik akhir yang diaktifkan AJAX ASP.NET yang dapat dipanggil dari JavaScript di situs Web klien. Prosedur dasar untuk membangun layanan tersebut dibahas dalam Cara: Menggunakan Konfigurasi untuk Menambahkan Titik Akhir ASP.NET AJAX dan Cara: Menambahkan Titik Akhir ASP.NET AJAX Tanpa Menggunakan Konfigurasi.

ASP.NET AJAX mendukung operasi yang menggunakan kata kerja HTTP POST dan HTTP GET, dengan HTTP POST menjadi default. Saat membuat operasi yang tidak memiliki efek samping dan mengembalikan data yang jarang atau tidak pernah berubah, gunakan HTTP GET sebagai gantinya. Hasil operasi GET dapat di-cache, yang berarti bahwa beberapa panggilan ke operasi yang sama hanya dapat mengakibatkan satu permintaan ke layanan Anda. Penembolokan tidak dilakukan oleh WCF tetapi dapat berlangsung di tingkat apa pun (di browser pengguna, di server proksi, dan tingkat lainnya.) Penembolokan menguntungkan jika Anda ingin meningkatkan performa layanan, tetapi mungkin tidak dapat diterima jika data sering berubah atau jika operasi melakukan beberapa tindakan.

Misalnya, jika Anda merancang layanan untuk mengelola pustaka musik pengguna, operasi yang mencari artis berdasarkan manfaat judul album dari menggunakan GET, tetapi operasi yang menambahkan album ke koleksi pribadi pengguna harus menggunakan POST.

Untuk mengontrol masa pakai cache, gunakan OutgoingWebResponseContext jenis. Misalnya, saat merancang layanan yang mengembalikan prakiraan cuaca yang diperbarui per jam, Anda akan menggunakan GET tetapi membatasi durasi cache hingga satu jam atau kurang untuk mencegah pengguna layanan mengakses data kedaluwarsa.

Saat menggunakan layanan dari halaman ASP.NET AJAX yang menggunakan kontrol Manajer Skrip, itu tidak ada bedanya apakah operasi menggunakan GET atau POST - mekanisme manajer skrip memastikan bahwa jenis permintaan yang benar dikeluarkan.

Operasi HTTP GET menggunakan parameter masukan apa pun yang didukung oleh operasi POST, termasuk jenis kontrak data yang kompleks. Namun, dalam kebanyakan kasus disarankan untuk menghindari terlalu banyak parameter atau parameter yang terlalu kompleks dalam operasi GET karena mengurangi efisiensi penembolokan.

Topik ini menunjukkan cara memilih antara GET dan POST dengan menambahkan atribut WebGetAttribute atau WebInvokeAttribute ke operasi yang relevan dalam kontrak layanan. Langkah-langkah lain (untuk mengimplementasikan, mengonfigurasi, dan meng-hosting layanan) yang diperlukan untuk menjalankan layanan mirip dengan yang digunakan oleh layanan ASP.NET AJAX di WCF.

Operasi yang ditandai dengan WebGetAttribute selalu menggunakan permintaan GET. Operasi yang ditandai dengan WebInvokeAttribute, atau tidak ditandai dengan salah satu dari dua atribut, menggunakan permintaan POST. WebInvokeAttribute memungkinkan penggunaan kata kerja HTTP lainnya, selain GET dan POST (seperti PUT dan DELETE) melalui properti Method. Namun, kata kerja lainnya ini tidak didukung oleh ASP.NET AJAX. Jika Anda berniat menggunakan layanan dari halaman ASP.NET menggunakan kontrol Manajer Skrip, jangan gunakan properti Method.

Untuk contoh peralihan yang berfungsi ke GET, lihat sampel Layanan Basic AJAX.

Untuk sampel yang menggunakan POST, lihat sampel Layanan AJAX Menggunakan HTTP POST.

Untuk membuat layanan WCF yang merespons permintaan HTTP GET atau HTTP POST

  1. Tentukan kontrak layanan WCF dasar dengan antarmuka yang ditandai dengan atribut ServiceContractAttribute. Tandai setiap operasi dengan OperationContractAttribute. Tambahkan atribut WebGetAttribute untuk menetapkan bahwa operasi harus merespons permintaan HTTP GET. Anda juga dapat menambahkan atribut WebInvokeAttribute untuk secara eksplisit menentukan HTTP POST, atau tidak menentukan atribut, yang default ke 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. Terapkan kontrak layanan IMusicService dengan MusicService.

    public class MusicService : IMusicService  
    {  
        public void AddAlbum(string user, string album)  
        {  
            //Add implementation here.  
        }  
    
         //Other operations omitted…  
    }  
    
  3. Buat file baru bernama layanan dengan ekstensi .svc dalam aplikasi. Edit file ini dengan menambahkan informasi direktif @ServiceHost yang sesuai untuk layanan. Tentukan bahwa WebScriptServiceHostFactory akan digunakan dalam direktif @ServiceHost untuk mengonfigurasi titik akhir AJAX ASP.NET secara otomatis.

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

Untuk memanggil layanan

  1. Anda dapat menguji operasi GET layanan Anda tanpa kode klien apa pun, dengan menggunakan browser. Misalnya, jika layanan Anda dikonfigurasi di http://example.com/service.svc alamat, maka mengetik http://example.com/service.svc/LookUpArtist?album=SomeAlbum ke bilah alamat browser memanggil layanan dan menyebabkan respons diunduh atau ditampilkan.

  2. Anda dapat menggunakan layanan dengan operasi GET dengan cara yang sama seperti layanan ASP.NET AJAX lainnya - dengan memasukkan URL layanan ke dalam kumpulan Skrip kontrol ASP.NET AJAX Script Manager. Misalnya, lihat Layanan AJAX Dasar.

Lihat juga