Postupy: Volba mezi žádostmi HTTP POST a HTTP GET u koncových bodů ASP.NET AJAX
Windows Communication Foundation (WCF) umožňuje vytvořit službu, která zveřejňuje koncový bod s podporou jazyka ASP.NET AJAX, který lze volat z JavaScriptu na klientském webu. Základní postupy pro vytváření takových služeb jsou popsány v tématu Postupy: Použití konfigurace k přidání koncového bodu ASP.NET AJAX a postupy: Přidání koncového bodu ASP.NET AJAX bez použití konfigurace.
ASP.NET AJAX podporuje operace, které používají příkazy HTTP POST a HTTP GET, přičemž http POST je výchozí. Při vytváření operace, která nemá žádné vedlejší účinky a vrací data, která se zřídka nebo nikdy nemění, použijte místo toho http GET. Výsledky operací GET je možné ukládat do mezipaměti, což znamená, že více volání stejné operace může vést pouze k jednomu požadavku na vaši službu. Ukládání do mezipaměti neprobíhá službou WCF, ale může probíhat na libovolné úrovni (v prohlížeči uživatele, na proxy serveru a dalších úrovních.) Ukládání do mezipaměti je výhodné, pokud chcete zvýšit výkon služby, ale nemusí být přijatelné, pokud se data často mění nebo pokud operace provádí nějakou akci.
Pokud například navrhujete službu pro správu hudební knihovny uživatele, musí operace, která hledá interpreta na základě názvu alba, využívat funkci GET, ale operace, která přidá album do osobní kolekce uživatele, musí používat post.
K řízení životnosti mezipaměti použijte OutgoingWebResponseContext typ. Například při návrhu služby, která vrací předpovědi počasí aktualizované každou hodinu, byste použili get, ale omezili dobu trvání mezipaměti na hodinu nebo méně, abyste uživatelům služby zabránili v přístupu k zastaralým datům.
Pokud používáte služby ze stránky ASP.NET AJAX, která používá ovládací prvek Správce skriptů, nezáleží na tom, jestli operace používá metodu GET nebo POST – mechanismus správce skriptů zajišťuje vydání správného typu požadavku.
Operace HTTP GET používají všechny vstupní parametry podporované operacemi POST, včetně komplexních typů kontraktů dat. Ve většině případů se ale doporučuje vyhnout se příliš mnoha parametrům nebo parametrům, které jsou v operacích GET příliš složité, protože snižuje efektivitu ukládání do mezipaměti.
Toto téma ukazuje, jak vybrat mezi funkcí GET a POST přidáním WebGetAttribute atributů WebInvokeAttribute do příslušných operací ve smlouvě o poskytování služeb. Další kroky (k implementaci, konfiguraci a hostování služby), které jsou potřeba k tomu, aby služba běžela, jsou podobné těm, které používají všechny služby ASP.NET AJAX ve WCF.
Operace označená WebGetAttribute vždy používá požadavek GET. Operace označená pomocí nebo není označená WebInvokeAttributežádným ze dvou atributů, používá požadavek POST. Umožňuje WebInvokeAttribute použití jiných příkazů HTTP, jiných než GET a POST (například PUT a DELETE) prostřednictvím Method vlastnosti. Tyto příkazy však ASP.NET AJAX nepodporují. Pokud chcete použít službu z ASP.NET stránek pomocí ovládacího prvku Správce skriptů, nepoužívejte Method vlastnost.
Funkční příklad přechodu na GET najdete v ukázce základní služby AJAX.
Ukázku, která používá funkci POST, najdete v ukázce SLUŽBY AJAX pomocí http POST .
Vytvoření služby WCF, která reaguje na požadavky HTTP GET nebo HTTP POST
Definujte základní kontrakt služby WCF s rozhraním označeným atributem ServiceContractAttribute . Označte každou operaci pomocí znaku OperationContractAttribute. WebGetAttribute Přidejte atribut, který stanoví, že operace by měla reagovat na požadavky HTTP GET. Můžete také přidat WebInvokeAttribute atribut, který explicitně specifikuje HTTP POST, nebo nezadá atribut, který má výchozí hodnotu 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… }
Implementace kontraktu
IMusicService
služby s .MusicService
public class MusicService : IMusicService { public void AddAlbum(string user, string album) { //Add implementation here. } //Other operations omitted… }
Vytvořte v aplikaci nový soubor s příponou .svc. Upravte tento soubor přidáním příslušných informací o direktivě @ServiceHost pro službu. Určete, že WebScriptServiceHostFactory se má použít v direktivě @ServiceHost k automatické konfiguraci koncového bodu ASP.NET AJAX.
<%@ServiceHost language=c# Debug="true" Service="Microsoft.Ajax.Samples.MusicService" Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory %>
Volání služby
Operace GET služby můžete otestovat bez jakéhokoli klientského kódu pomocí prohlížeče. Pokud je například služba nakonfigurovaná na
http://example.com/service.svc
adrese, pak se zadánímhttp://example.com/service.svc/LookUpArtist?album=SomeAlbum
do adresního řádku prohlížeče vyvolá služba a způsobí stažení nebo zobrazení odpovědi.Služby s operacemi GET můžete používat stejným způsobem jako všechny ostatní ASP.NET služby AJAX – zadáním adresy URL služby do kolekce Skripty ovládacího prvku ASP.NET AJAX Script Manager. Příklad najdete ve službě Basic AJAX.