Nasıl yapılır: ASP.NET AJAX Uç Noktaları için HTTP POST ve HTTP GET İstekleri Arasında Seçim Yapma

Windows Communication Foundation (WCF), istemci Web sitesindeki JavaScript'ten çağrılabilen ASP.NET AJAX özellikli uç noktayı kullanıma sunan bir hizmet oluşturmanıza olanak tanır. Bu tür hizmetleri oluşturmaya yönelik temel yordamlar Nasıl yapılır: ASP.NET AJAX Uç Noktası Eklemek için Yapılandırmayı Kullanma ve Nasıl yapılır: Yapılandırma Kullanmadan ASP.NET AJAX Uç Noktası Ekleme makalesinde ele alınıyor.

ASP.NET AJAX, HTTP POST ve HTTP GET fiillerini kullanan işlemleri destekler ve http POST varsayılandır. Yan etkisi olmayan ve nadiren değişen veya hiç değişmemiş verileri döndüren bir işlem oluştururken bunun yerine HTTP GET kullanın. GET işlemlerinin sonuçları önbelleğe alınabilir, bu da aynı işleme yapılan birden çok çağrının hizmetinize yalnızca bir istekle sonuçlanabileceği anlamına gelir. Önbelleğe alma WCF tarafından yapılmaz ancak herhangi bir düzeyde (kullanıcının tarayıcısında, ara sunucuda ve diğer düzeylerde) gerçekleşebilir. Önbelleğe Alma, hizmet performansını artırmak istiyorsanız avantajlıdır, ancak veriler sık sık değişirse veya işlem bazı eylemler gerçekleştirirse kabul edilebilir olmayabilir.

Örneğin, kullanıcının müzik kitaplığını yönetmek için hizmet tasarlarsanız, sanatçıyı albümün başlığına göre arayabilen bir işlem GET kullanmanın avantajlarından yararlanır, ancak kullanıcının kişisel koleksiyonuna albüm ekleyen bir işlem POST kullanmalıdır.

Önbelleğin ömrünü denetlemek için türünü kullanın OutgoingWebResponseContext . Örneğin, saatlik olarak güncelleştirilen hava durumu tahminlerini döndüren bir hizmet tasarlarken GET kullanırsınız ancak hizmet kullanıcılarının eski verilere erişmesini önlemek için önbellek süresini bir saat veya daha kısa bir süreyle sınırlandırırsınız.

Betik Yöneticisi denetimini kullanan bir ASP.NET AJAX sayfasından hizmetleri kullanırken, işlemin GET veya POST kullanması fark eder; betik yöneticisi mekanizması doğru istek türünün verilmesini sağlar.

HTTP GET işlemleri, karmaşık veri sözleşmesi türleri de dahil olmak üzere POST işlemleri tarafından desteklenen tüm giriş parametrelerini kullanır. Ancak çoğu durumda, önbelleğe alma verimliliğini azalttığı için GET işlemlerinde çok karmaşık olan çok fazla parametre veya parametreden kaçınmanızı öneririz.

Bu konu başlığında, hizmet sözleşmesindeki WebGetAttribute ilgili işlemlere veya WebInvokeAttribute özniteliklerini ekleyerek GET ve POST arasında nasıl seçim yapılacağını gösterir. Hizmeti çalıştırmak için gereken diğer adımlar (hizmeti uygulamak, yapılandırmak ve barındırmak için), WCF'deki herhangi bir ASP.NET AJAX hizmeti tarafından kullanılan adımlara benzer.

ile WebGetAttribute işaretlenmiş bir işlem her zaman bir GET isteği kullanır. ile WebInvokeAttributeişaretlenmiş veya iki özniteliğin herhangi biriyle işaretlenmemiş bir işlem post isteği kullanır. özelliği WebInvokeAttribute aracılığıyla GET ve POST (PUT ve DELETE gibi) dışında diğer HTTP fiillerinin kullanılmasına Method izin verir. Ancak, bu fiiller ASP.NET AJAX tarafından desteklenmez. Betik Yöneticisi denetimini kullanarak ASP.NET sayfalardan hizmeti kullanmayı planlıyorsanız özelliğini kullanmayın Method .

GET'e geçmenin çalışan bir örneği için Temel AJAX Hizmeti örneğine bakın.

POST kullanan bir örnek için bkz . HTTP POST Kullanarak AJAX Hizmeti örneği.

HTTP GET veya HTTP POST isteklerine yanıt veren bir WCF hizmeti oluşturmak için

  1. özniteliğiyle ServiceContractAttribute işaretlenmiş bir arabirimle temel bir WCF hizmet sözleşmesi tanımlayın. Her işlemi ile OperationContractAttributeişaretleyin. WebGetAttribute bir işlemin HTTP GET isteklerine yanıt vermesi gerektiğini belirtecek özniteliğini ekleyin. Ayrıca, HTTP POST'un açıkça belirtilmesi için özniteliğini ekleyebilir WebInvokeAttribute veya varsayılan olarak HTTP POST olan bir öznitelik belirtemezsiniz.

    [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. hizmet sözleşmesini IMusicService ile MusicServiceuygulayın.

    public class MusicService : IMusicService  
    {  
        public void AddAlbum(string user, string album)  
        {  
            //Add implementation here.  
        }  
    
         //Other operations omitted…  
    }  
    
  3. Uygulamada .svc uzantısıyla service adlı yeni bir dosya oluşturun. Hizmet için uygun @ServiceHost yönerge bilgilerini ekleyerek bu dosyayı düzenleyin. WebScriptServiceHostFactory ASP.NET AJAX uç noktasını otomatik olarak yapılandırmak için @ServiceHost yönergesinde kullanılacağını belirtin.

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

Hizmeti çağırmak için

  1. Tarayıcıyı kullanarak hizmetinizin GET işlemlerini herhangi bir istemci kodu olmadan test edebilirsiniz. Örneğin, hizmetiniz adreste http://example.com/service.svc yapılandırılmışsa tarayıcı adres çubuğuna yazmak http://example.com/service.svc/LookUpArtist?album=SomeAlbum hizmeti çağırır ve yanıtın indirilmesine veya görüntülenmesine neden olur.

  2. Hizmet URL'sini ASP.NET AJAX Betik Yöneticisi denetiminin Scripts koleksiyonuna girerek, GET işlemleriyle hizmetleri diğer ASP.NET AJAX hizmetleriyle aynı şekilde kullanabilirsiniz. Bir örnek için bkz . Temel AJAX Hizmeti.

Ayrıca bkz.