Teilen über


Erstellen von WCF AJAX-Diensten ohne ASP.NET

Auf AJAX-Dienste (Windows Communication Foundation, WCF) kann über jede JavaScript-fähige 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 Creating WCF Services for ASP.NET AJAX.

Es gibt drei Teile für die Erstellung eines WCF AJAX-Diensts:

  • Erstellen eines AJAX-Endpunkts, auf den über den Browser zugegriffen werden kann.

  • Erstellen eines AJAX-kompatiblen Dienstvertrags.

  • Zugreifen auf WCF AJAX-Dienste.

Erstellen eines AJAX-Endpunkts

Die einfachste Möglichkeit zum Aktivieren der AJAX-Unterstützung in einem WCF-Dienst besteht darin, die WebServiceHostFactory dem Dienst zugeordnete SVC-Datei zu verwenden, wie im folgenden Beispiel.

<%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 im AJAX-Dienst mit JSON und XML.

Erstellen eines AJAX-Compatible-Servicevertrags

Standardmäßig werden Dienstverträge, die über einen AJAX-Endpunkt verfügbar gemacht werden, Daten im XML-Format zurückgeben. Standardmäßig sind Dienstvorgänge über HTTP POST-Anforderungen auf URLs zugänglich, die die Endpunktadresse und den folgenden Vorgangsnamen enthalten, wie in folgendem Beispiel gezeigt wird.

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

Auf diesen Vorgang kann über einen HTTP-POST auf http://serviceaddress/endpointaddress/GetCities zugegriffen werden, und es wird eine XML-Nachricht zurückgegeben.

Sie können das vollständige Webprogrammiermodell verwenden, um diese grundlegenden Aspekte anzupassen. Sie können z. B. die WebGetAttributeWebInvokeAttribute Attribute verwenden, um das HTTP-Verb zu steuern, auf das der Vorgang antwortet, oder die UriTemplate Eigenschaft dieser jeweiligen Attribute verwenden, um benutzerdefinierte URIs anzugeben. Weitere Informationen finden Sie im Thema zum WCF-Web-HTTP-Programmiermodell .

Das JSON-Datenformat wird häufig in AJAX-Diensten verwendet. Um einen Vorgang zu erstellen, der JSON anstelle von XML zurückgibt, legen Sie die ResponseFormat (oder die ResponseFormat) -Eigenschaft auf Json. Im ThemaStand-Alone JSON-Serialisierung wird gezeigt, wie eingebettete .NET-Typen und Datentypen der Datenverträge auf JSON abgebildet werden.

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

"na"  

Die Antwort auf diese Anfrage gleicht der folgenden Aussage.

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

Wenn der Vorgang einen zusätzlichen Parameter verwendet, muss der Anforderungsstil umschlossen werden, um beide Parameter in einem einzelnen JSON-Objekt umzuschließen. Ein Beispiel für diese Art von JSON-Nachricht ist im folgenden Abschnitt zu sehen.

{"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 JSON- und XML-Anforderungen.

HTTP POST-Anforderungen mit einem Inhaltstyp von "application/json" werden als JSON behandelt, und diejenigen mit Inhaltstyp, die XML angeben (z. B. "text/xml") werden als XML behandelt.

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

Der Benutzer muss entscheiden, wie die HTTP-Anforderung an den Endpunkt erstellt wird. Außerdem hat der Benutzer die vollständige Kontrolle über das Erstellen des JSON-Codes, das den Textkörper der Anforderung bildet. Ein Beispiel zum Erstellen einer Anforderung aus JavaScript finden Sie im AJAX-Dienst mit JSON und XML.