Einfacher AJAX-Dienst

Im SimpleAjaxService-Beispiel wird die Verwendung von Windows Communication Foundation (WCF) zum Erstellen eines einfachen AJAX-Diensts (ASP.NET Asynchronous JavaScript and XML) beschrieben. (Dabei handelt es sich um einen Dienst, auf den Sie anhand von JavaScript-Code über einen Webbrowserclient zugreifen können.) Der Dienst nutzt das WebGetAttribute-Attribut, um sicherzustellen, dass der Dienst auf HTTP GET-Anforderungen antwortet und für die Verwendung von JSON-Daten (JavaScript Object Notation) für Antworten konfiguriert ist.

Die AJAX-Unterstützung in WCF ist für die Verwendung mit ASP.NET AJAX über das ScriptManager-Steuerelement optimiert. Ein Beispiel für die Verwendung von WCF mit ASP.NET AJAX finden Sie in den AJAX-Beispielen.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Im folgenden Code wird das WebGetAttribute-Attribut auf den Add-Vorgang angewandt, um sicherzustellen, dass der Dienst auf HTTP GET-Anforderungen antwortet. Der Einfachheit halber nutzt der Code GET (Sie können eine HTTP GET-Anforderung von jedem Webbrowser aus erstellen). Sie können GET auch verwenden, um Caching zu aktivieren. Bei Fehlen des WebGetAttribute-Attributs ist die Standardeinstellung HTTP POST.

[ServiceContract(Namespace = "SimpleAjaxService")]
public interface ICalculator
{
    [WebGet]
    double Add(double n1, double n2);
    //Other operations omitted…
}

Die SVC-Beispieldatei verwendet WebScriptServiceHostFactory, wodurch dem Dienst ein WebScriptEndpoint-Standardendpunkt hinzugefügt wird. Der Endpunkt wird an einer leeren Adresse relativ zur SVC-Datei konfiguriert. Dies bedeutet, dass die Adresse des Diensts http://localhost/ServiceModelSamples/service.svc lautet und keine Suffixe außer dem Vorgangsnamen aufweist.

<%@ServiceHost language="C#" Debug="true" Service="Microsoft.Samples.SimpleAjaxService.CalculatorService" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>

Der WebScriptEndpoint ist so vorkonfiguriert, dass von einer ASP.NET AJAX-Clientseite aus auf den Dienst zugegriffen werden kann. Im folgenden Abschnitt in der Datei Web.config können zusätzliche Konfigurationsänderungen am Endpunkt vorgenommen werden. Wenn keine zusätzlichen Änderungen erforderlich sind, kann der Abschnitt entfernt werden.

<system.serviceModel>
  <standardEndpoints>
    <webScriptEndpoint>
      <!-- Use this element to configure the endpoint -->
      <standardEndpoint name=""  />
    </webScriptEndpoint>
  </standardEndpoints>
</system.serviceModel>

Der WebScriptEndpoint legt das Standarddatenformat für den Dienst auf JSON anstelle von XML fest. Um den Dienst aufzurufen, navigieren Sie zu http://localhost/ServiceModelSamples/service.svc/Add?n1=100&n2=200, nachdem Sie die Einrichtungs- und Buildanweisungen weiter unten in diesem Thema abgeschlossen haben. Diese Testfunktion wird durch die Verwendung einer HTTP GET-Anforderung aktiviert.

Die Clientwebseite SimpleAjaxClientPage.aspx enthält ASP.NET-Code zum Aufrufen des Diensts, wenn der Benutzer auf eine der Vorgangsschaltflächen auf der Seite klickt. Das ScriptManager-Steuerelement wird verwendet, um dem Dienst durch JavaScript einen Proxy verfügbar zu machen.

<asp:ScriptManager ID="ScriptManager" runat="server">
    <Services>
        <asp:ServiceReference Path="service.svc" />
    </Services>
</asp:ScriptManager>

Der lokale Proxy wird instanziiert, und Vorgänge werden mit dem folgenden JavaScript-Code aufgerufen.

// Code for extracting arguments n1 and n2 omitted…
// Instantiate a service proxy
var proxy = new SimpleAjaxService.ICalculator();
// Code for selecting operation omitted…
proxy.Add(parseFloat(n1), parseFloat(n2), onSuccess, onFail, null);

Ist der Dienstaufruf erfolgreich, ruft der Code einen onSuccess-Handler auf, und das Ergebnis des Vorgangs wird in einem Textfeld angezeigt.

function onSuccess(mathResult){
     document.getElementById("result").value = mathResult;
}