Freigeben über


Erstellen von WCF AJAX-Diensten ohne ASP.NET

Auf WFC AJAX-Dienste (Windows Communication Foundation) kann von jeder JavaScript-aktivierten Webseite zugegriffen werden, ohne dass ASP.NET AJAX erforderlich ist. In diesem Thema wird beschrieben, wie ein solcher WCF-Dienst erstellt wird.

Anweisungen zur Verwendung von WCF mit ASP.NET AJAX finden Sie unter Erstellen von WCF-Diensten für ASP.NET AJAX.

Zur Erstellung eines WFC AJAX-Diensts sind drei Schritte erforderlich:

  • Erstellen eines AJAX-Endpunkts, auf den vom Browser aus zugegriffen werden kann.

  • Erstellen eines AJAX-kompatiblen Dienstvertrags.

  • Zugreifen auf den WCF AJAX-Dienst.

Erstellen eines AJAX-Endpunkts

Der einfachste Weg, AJAX-Unterstützung in einem WCF-Dienst zu aktivieren, besteht darin, in der dem Dienst zugeordneten SVC-Datei WebServiceHostFactory zu verwenden, wie im folgenden Beispiel gezeigt:

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

Alternativ können Sie auch die Konfiguration verwenden, um einen AJAX-Endpunkt hinzuzufügen. Verwenden Sie die WebHttpBinding des Dienstendpunkts, und konfigurieren Sie diesen Endpunkt mit dem WebHttpBehavior, wie im folgenden Codeausschnitt dargestellt.

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="AjaxBehavior">  
          <webHttp/>  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <services>  
      <service name="Microsoft.Ajax.Samples.CityService">  
        <endpoint
          address="ajaxEndpoint"  
          behaviorConfiguration="AjaxBehavior"  
          binding="webHttpBinding"  
          contract="Microsoft.Ajax.Samples.ICityService" />  
      </service>  
    </services>  
  </system.serviceModel>  
</configuration>  

Ein funktionierendes Beispiel finden Sie unter Beispiel für AJAX-Dienst mit JSON und XML.

Erstellen eines AJAX-kompatiblen Dienstvertrags

Standardmäßig geben die über einem AJAX-Endpunkt verfügbar gemachten Dienstverträge Daten im XML-Format zurück. Ebenso standardmäßig kann auf die Dienstvorgänge über HTTP POST-Anforderungen mit URLs zugegriffen werden, die die Endpunktadresse gefolgt vom Vorgangsnamen enthalten, wie im folgenden Beispiel gezeigt.

[OperationContract]  
string[] GetCities(string firstLetters);  

Auf diesen Vorgang kann mithilfe einer HTTP POST-Anforderung an http://serviceaddress/endpointaddress/GetCities zugegriffen werden. Zurückgegeben wird eine XML-Nachricht.

Sie können das vollständige Webprogrammiermodell verwenden, um diese grundlegenden Aspekte anzupassen. Sie können beispielsweise die Attribute WebGetAttribute oder WebInvokeAttribute verwenden, um zu steuern, auf welche HTTP-Verben der Vorgang reagiert, oder die Eigenschaft UriTemplate dieser jeweiligen Attribute verwenden, um benutzerdefinierte URIs anzugeben usw. Weitere Informationen finden Sie im Thema WCF-Web-HTTP-Programmiermodell.

Das JSON-Datenformat wird oft in AJAX-Diensten verwendet. Um einen Vorgang zu erstellen, der JSON statt XML zurückgibt, legen Sie die ResponseFormat-Eigenschaft (oder die ResponseFormat-Eigenschaft) auf Json fest. Im Thema Eigenständige JSON-Serialisierung mit DataContractJsonSerializer wird gezeigt, wie die integrierten .NET-Typen und Datenvertragstypen JSON zugeordnet werden.

Normalerweise bestehen JSON-Anforderungen und -Antworten aus nur einem Element. Für den vorangehenden GetCities-Vorgang ähnelt die Anforderung der folgenden Anweisung.

"na"  

Die Antwort auf diese Anforderung ähnelt der folgenden Anweisung.

["Nairobi", "Naples", "Nashville"]  

Wenn der Vorgang einen zusätzlichen Parameter annimmt, muss der Anforderungsstil auf "wrapped" festgelegt werden, damit beide Parameter einem einzigen JSON-Objekt zugeordnet werden. Ein Beispiel für eine JSON-Nachricht in diesem Stil finden Sie im folgenden Beispiel.

{"firstLetters": "na", "maxNumber": 2}  

Der folgende Vertrag akzeptiert diese Nachricht.

[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)]  
[OperationContract]  
string[] GetCities(string firstLetters, int maxNumber);  

Zugreifen auf AJAX-Dienste

WCF AJAX-Endpunkte akzeptieren immer sowohl JSON- als auch XML-Anforderungen.

HTTP POST-Anforderungen mit dem Inhaltstyp „application/json“ werden als JSON behandelt, und jene mit einem Inhaltstyp, der auf XML hinweist (z. B. „text/xml“), werden als XML behandelt.

HTTP GET-Anforderungen enthalten alle Anforderungsparameter in der URL selbst.

Es obliegt dem Benutzer zu entscheiden, wie die HTTP-Anforderung für den Endpunkt erstellt wird. Der Benutzer kann umfassend steuern, wie das den Text der Anforderung bildende JSON erstellt wird. Ein Beispiel für das Erstellen einer Anforderung aus JavaScript finden Sie unter Beispiel für AJAX-Dienst mit JSON und XML.