Vorgehensweise: Auswählen zwischen HTTP POST- und HTTP GET-Anforderungen für ASP.NET AJAX-EndpunkteHow to: Choose between HTTP POST and HTTP GET requests for ASP.NET AJAX Endpoints

Windows Communication Foundation (WCF) ermöglicht Ihnen die Erstellung ein Diensts, das einen ASP.NET AJAX-aktivierten Endpunkt verfügbar macht, der auf eine Client-Website von JavaScript aufgerufen werden können.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. Erläutert die grundlegenden Verfahren zum Erstellen von Diensten Vorgehensweise: Verwenden der Konfiguration zum Hinzufügen eines ASP.NET AJAX-Endpunkts und wie: Hinzufügen einer ASP.NET AJAX-Endpunkt ohne mithilfe der Konfiguration.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 unterstützt Vorgänge, die HTTP POST- und HTTP GET-Verben verwenden, wobei HTTP POST der Standard ist.ASP.NET AJAX supports operations that use the HTTP POST and HTTP GET verbs, with HTTP POST being the default. Wenn Sie einen Vorgang erstellen, der keine Nebeneffekte hat und Daten zurückgibt, die sich selten oder niemals ändern, können Sie stattdessen HTTP GET verwenden.When creating an operation that has no side effects and returns data that rarely or never changes, use HTTP GET instead. Die Ergebnisse von GET-Vorgängen können zwischengespeichert werden, was bedeutet, dass mehrere Aufrufe des gleichen Vorgangs zu nur einer Anforderung an den Dienst zusammengefasst werden können.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. Das Zwischenspeichern von WCF nicht erfolgt, sondern kann stattfinden auf einer Ebene (im Browser eines Benutzers, auf einem Proxyserver befinden, und auf anderen Ebenen.) Die Zwischenspeicherung ist dann vorteilhaft, wenn Sie die Leistung des Diensts erhöhen möchten. Sie ist aber möglicherweise inakzeptabel, wenn sich die Daten häufig ändern oder wenn der Vorgang irgendeine Aktion ausführt.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.

Wenn Sie beispielsweise einen Dienst für die Verwaltung der Musikbibliothek eines Benutzers entwickeln, ist es für einen Vorgang, der auf der Basis des Albumtitels den Künstler ermittelt, sinnvoll, GET zu verwenden. Ein Vorgang jedoch, der ein Album in die Sammlung des Benutzers einfügt, muss POST verwenden.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.

Verwenden Sie zur Steuerung der Lebensdauer des Zwischenspeichers den OutgoingWebResponseContext-Typ.To control the lifetime of the cache, use the OutgoingWebResponseContext type. Wenn Sie beispielsweise einen Dienst entwickeln, der stündlich aktualisierte Wettervorhersagen zurückgibt, könnten Sie GET verwenden, jedoch die Lebensdauer des Zwischenspeichers auf eine Stunde oder weniger beschränken, damit die Benutzer des Diensts keine veralteten Daten erhalten.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.

Wenn Sie auf Dienste von einer ASP.NET AJAX-Seite zugreifen, die das Skript-Manager-Steuerelement verwendet, ist es gleichgültig, ob der Vorgang GET oder POST verwendet – der Skript-Manager stellt sicher, dass der korrekte Anforderungstyp ausgegeben wird.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.

HTTP GET-Vorgänge verwenden alle von POST-Vorgängen unterstützten Eingabeparameter, einschließlich komplexer Datenvertragstypen.HTTP GET operations use any input parameters supported by POST operations, including complex data contract types. In den meisten Fällen ist es jedoch empfehlenswert, zu viele oder zu komplexe Parameter in GET-Vorgängen zu vermeiden, da sie die Effizienz der Zwischenspeicherung vermindern.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 diesem Thema wird gezeigt, wie zwischen GET und POST ausgewählt wird, indem den relevanten Vorgängen das WebGetAttribute- oder das WebInvokeAttribute-Attribut im Dienstvertrag hinzugefügt wird.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. Die anderen Schritte (zum Implementieren, konfigurieren und Hosten des Diensts), die erforderlich sind, zum Abrufen des Diensts ausgeführt werden ähnlich wie jeden ASP.NET AJAX-Dienst 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.

Ein mit dem WebGetAttribute markierter Vorgang verwendet immer eine GET-Anforderung.An operation marked with the WebGetAttribute always uses a GET request. Ein mit dem WebInvokeAttribute oder mit keinem der beiden Attribute markierter Vorgang verwendet eine POST-Anforderung.An operation marked with the WebInvokeAttribute, or not marked with any of the two attributes, uses a POST request. Das WebInvokeAttribute erlaubt über die Method-Eigenschaft die Verwendung anderer HTTP-Verben als GET und POST (etwa PUT und DELETE).The WebInvokeAttribute allows the use of other HTTP verbs, other than GET and POST (such as PUT and DELETE) through the Method property. Diese Verben werden jedoch von ASP.NET AJAX nicht unterstützt.However, these verbs are not supported by ASP.NET AJAX. Verwenden Sie die Method-Eigenschaft nicht, wenn Sie vorhaben, den Dienst von ASP.NET-Seiten aus aufzurufen, die das Skript-Manager-Steuerelement verwenden.If you intend to use the service from ASP.NET pages using the Script Manager control, do not use the Method property.

Ein funktionsfähiges Beispiel der Wechsel zum Abrufen, finden Sie unter der einfacher AJAX-Dienst Beispiel.For a working example of switching to GET, see the Basic AJAX Service sample.

Ein Beispiel, das POST verwendet, finden Sie unter der AJAX-Dienst mithilfe von HTTP-POST Beispiel.For a sample that uses POST, see the AJAX Service Using HTTP POST sample.

So erstellen Sie einen WCF-Dienst, der auf HTTP GET- oder HTTP POST-Anforderungen reagiertTo create a WCF service that responds to HTTP GET or HTTP POST requests

  1. Definieren Sie einen grundlegenden WCF-Dienstvertrag mit einer Schnittstelle, die mit markierten der ServiceContractAttribute Attribut.Define a basic WCF service contract with an interface marked with the ServiceContractAttribute attribute. Markieren Sie jeden Vorgang mit OperationContractAttribute.Mark each operation with the OperationContractAttribute. Fügen Sie das WebGetAttribute-Attribut hinzu, um festzulegen, dass ein Vorgang auf HTTP GET-Anforderungen reagieren sollte.Add the WebGetAttribute attribute to stipulate that an operation should respond to HTTP GET requests. Sie können auch das WebInvokeAttribute-Attribut hinzufügen, um explizit die Auswahl von HTTP POST festzulegen, oder Sie geben überhaupt kein Attribut an, wodurch standardmäßig HTTP POST verwendet wird.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. Implementieren Sie den IMusicService-Dienstvertrag mit 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. Erstellen Sie eine neue Datei mit einer SVC-Erweiterung in der Anwendung.Create a new file named service with a .svc extension in the application. Bearbeiten Sie diese Datei durch Hinzufügen der entsprechenden @ServiceHost Richtlinie Informationen für den Dienst.Edit this file by adding the appropriate @ServiceHost directive information for the service. Angeben, die die WebScriptServiceHostFactory in verwendet werden soll die @ServiceHost Richtlinie automatisch einen ASP.NET AJAX-Endpunkt zu konfigurieren.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  
    %>  
    

So rufen Sie den Dienst aufTo call the service

  1. Sie können die GET-Vorgänge Ihres Diensts ohne irgendeinen Clientcode testen, indem Sie den Browser verwenden.You can test your service's GET operations without any client code, by using the browser. Z. B. Wenn Ihr Dienst konfiguriert ist, auf die "http://example.com/service.svc"Address, dann eingeben"http://example.com/service.svc/LookUpArtist?album=SomeAlbum" in den Browser Adressleiste Ruft den Dienst auf und bewirkt, dass die Antwort, heruntergeladen oder angezeigt werden soll.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. Sie können Dienste mit GET-Vorgängen auf gleiche Weise wie jeden anderen ASP.NET AJAX-Dienst verwenden – indem Sie die Dienst-URL in die Scripts-Auflistung des ASP.NET AJAX Script Manager-Steuerelements eingeben.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. Ein Beispiel finden Sie die einfacher AJAX-Dienst.For an example, see the Basic AJAX Service.

Siehe auchSee Also

Erstellen von WCF-Diensten für ASP.NET AJAXCreating WCF Services for ASP.NET AJAX
Vorgehensweise: Migrieren AJAX-aktivierter ASP.NET-Webdienste zu WCFHow to: Migrate AJAX-Enabled ASP.NET Web Services to WCF