Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit Windows Communication Foundation (WCF) können Sie einen Dienst erstellen, der einen ASP.NET AJAX-fähigen Endpunkt verfügbar macht, der von JavaScript auf einer Clientwebsite aufgerufen werden kann. Die grundlegenden Verfahren zum Erstellen solcher Dienste werden in How to: Use Configuration to Add an ASP.NET AJAX Endpoint und How to: Add an ASP.NET AJAX Endpoint Without Using Configuration erläutert.
ASP.NET AJAX unterstützt Vorgänge, die http POST- und HTTP GET-Verben verwenden, wobei HTTP POST standardmäßig ist. Wenn Sie einen Vorgang erstellen, der keine Nebenwirkungen aufweist und Daten zurückgibt, die sich selten oder nie ändern, verwenden Sie stattdessen HTTP GET. Die Ergebnisse von GET-Vorgängen können zwischengespeichert werden, was bedeutet, dass mehrere Aufrufe desselben Vorgangs nur zu einer Anforderung an Ihren Dienst führen können. Die Zwischenspeicherung erfolgt nicht durch WCF, kann aber auf jeder Ebene (im Browser eines Benutzers, auf einem Proxyserver und auf anderen Ebenen) erfolgen.) Das Zwischenspeichern ist vorteilhaft, wenn Sie die Leistung des Diensts erhöhen möchten, aber möglicherweise nicht akzeptabel sind, wenn sich Daten häufig ändern oder wenn der Vorgang eine Aktion ausführt.
Wenn Sie beispielsweise einen Dienst zum Verwalten der Musikbibliothek eines Benutzers entwerfen, profitiert ein Vorgang, der den Künstler basierend auf dem Titel eines Albums nachschlägt, von der Verwendung von GET, während ein Vorgang, der ein Album zur persönlichen Sammlung des Benutzers hinzufügt, POST verwenden muss.
Verwenden Sie den OutgoingWebResponseContext Typ, um die Lebensdauer des Caches zu steuern. Wenn Sie beispielsweise einen Dienst entwerfen, der Wettervorhersagen stündlich zurückgibt, verwenden Sie GET, beschränken jedoch die Cachedauer auf eine Stunde oder weniger, um zu verhindern, dass die Benutzer des Diensts auf veraltete Daten zugreifen.
Wenn Sie Dienste von einer ASP.NET AJAX-Seite verwenden, die das Skript-Manager-Steuerelement verwenden, macht es keinen Unterschied, ob der Vorgang GET oder POST verwendet. Der Skript-Manager-Mechanismus stellt sicher, dass der richtige Anforderungstyp ausgegeben wird.
HTTP GET-Vorgänge verwenden alle eingabeparameter, die von POST-Vorgängen unterstützt werden, einschließlich komplexer Datentypen. In den meisten Fällen wird jedoch empfohlen, zu viele Parameter oder Parameter zu vermeiden, die in GET-Vorgängen zu komplex sind, da dadurch die Zwischenspeicherungseffizienz reduziert wird.
In diesem Thema wird veranschaulicht, wie Sie zwischen GET und POST auswählen, indem Sie die Attribute WebGetAttribute oder WebInvokeAttribute zu den relevanten Vorgängen im Dienstvertrag hinzufügen. Die anderen Schritte (zum Implementieren, Konfigurieren und Hosten des Diensts), die zum Ausführen des Diensts erforderlich sind, ähneln denen, die von einem beliebigen ASP.NET AJAX-Dienst in WCF verwendet werden.
Eine Operation, die mit der WebGetAttribute immer als eine GET-Anforderung gekennzeichnet ist. Ein vorgang, der mit dem WebInvokeAttribute, oder nicht mit einem der beiden Attribute gekennzeichnet ist, verwendet eine POST-Anforderung. Dies WebInvokeAttribute ermöglicht die Verwendung anderer HTTP-Verben, außer GET und POST (z. B. PUT und DELETE) über die Method Eigenschaft. Diese Verben werden jedoch von ASP.NET AJAX nicht unterstützt. Wenn Sie den Dienst über ASP.NET Seiten mit dem Skript-Manager-Steuerelement verwenden möchten, verwenden Sie die Method Eigenschaft nicht.
Ein funktionierendes Beispiel für den Wechsel zu GET finden Sie im Beispiel für den Einfachen AJAX-Dienst .
Ein Beispiel, das POST verwendet, finden Sie im BEISPIEL "AJAX Service Using HTTP POST ".
So erstellen Sie einen WCF-Dienst, der auf HTTP GET- oder HTTP POST-Anforderungen antwortet
Definieren Sie einen einfachen WCF-Dienstvertrag mit einer Schnittstelle, die mit dem ServiceContractAttribute Attribut gekennzeichnet ist. Markieren Sie jeden Vorgang mit der OperationContractAttribute. Fügen Sie das WebGetAttribute Attribut hinzu, um festzulegen, dass ein Vorgang auf HTTP GET-Anforderungen reagieren soll. Sie können das WebInvokeAttribute Attribut auch hinzufügen, um HTTP POST explizit anzugeben oder kein Attribut anzugeben, das standardmäßig auf HTTP POST festgelegt ist.
[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… }Umsetzen des
IMusicService-Dienstvertrags mit einemMusicService.public class MusicService : IMusicService { public void AddAlbum(string user, string album) { //Add implementation here. } //Other operations omitted… }Erstellen Sie eine neue Datei namens service mit der Erweiterung .svc in der Anwendung. Bearbeiten Sie diese Datei, indem Sie die entsprechenden @ServiceHost Direktiveninformationen für den Dienst hinzufügen. Geben Sie an, dass sie WebScriptServiceHostFactory in der @ServiceHost-Direktive verwendet werden soll, um automatisch einen ASP.NET AJAX-Endpunkt zu konfigurieren.
<%@ServiceHost language=c# Debug="true" Service="Microsoft.Ajax.Samples.MusicService" Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory %>
So rufen Sie den Dienst auf
Sie können die GET-Vorgänge Ihres Diensts ohne Clientcode mithilfe des Browsers testen. Wenn Ihr Dienst beispielsweise an der
http://example.com/service.svcAdresse konfiguriert ist, ruft die Eingabehttp://example.com/service.svc/LookUpArtist?album=SomeAlbumin die Adressleiste des Browsers den Dienst auf und bewirkt, dass die Antwort heruntergeladen oder angezeigt wird.Sie können Dienste mit GET-Vorgängen auf die gleiche Weise wie alle anderen ASP.NET AJAX-Dienste verwenden, indem Sie die Dienst-URL in die Skriptsammlung des steuerelements ASP.NET AJAX Script Manager eingeben. Ein Beispiel finden Sie im Standard AJAX-Dienst.