Erstellen von WCF AJAX-Diensten ohne ASP.NET

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

Hinweise für das Verwenden von WCF mit ASP.NET AJAX finden Sie unter Erstellen von WCF-Diensten für ASP.NET AJAX.

Zur Erstellung eines funktionsfähigen WCF 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ützunmg in einem WCF-Dienst zu aktivieren, besteht darin, in der dem Dienst zugeordneten SVC-Datei die 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 funktionsfähiges Beispiel finden Sie unter 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 über HTTP POST für http://serviceaddress/endpointaddress/GetCities zugegriffen werden. Es wird eine XML-Nachricht zurückgegeben.

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 unter dem folgenden 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 WebMessageFormat fest. Im Thema Eigenständige JSON-Serialisierung. 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

WCFAJAX-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 XML angebenden Inhaltstyp (z.&#160;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 die Erstellung einer Anforderung mithilfe von JavaScript finden Sie unter AJAX-Dienst mit JSON und XML.