Erstellen von WCF AJAX-Diensten ohne ASP.NETCreating WCF AJAX Services without ASP.NET

Auf Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) AJAX-Dienste kann von jeder JavaScript-aktivierten Webseite zugegriffen werden, ohne dass ASP.NET AJAX erforderlich wäre.Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) AJAX services can be accessed from any JavaScript-enabled Web page, without requiring ASP.NET AJAX. In diesem Thema wird beschrieben, wie ein solcher WCFWCF-Dienst erstellt wird.This topic describes how to create such a WCFWCF service.

Anweisungen zur Verwendung WCFWCF mit ASP.NET AJAX finden Sie unter Erstellen von WCF-Diensten für ASP.NET AJAX.For instructions on using WCFWCF with ASP.NET AJAX, see Creating WCF Services for ASP.NET AJAX.

Zur Erstellung eines funktionsfähigen WCFWCF AJAX-Diensts sind drei Schritte erforderlich:There are three parts to a creating a WCFWCF AJAX service:

  • Erstellen eines AJAX-Endpunkts, auf den vom Browser aus zugegriffen werden kann.Creating an AJAX endpoint that can be accessed from the browser.

  • Erstellen eines AJAX-kompatiblen Dienstvertrags.Creating an AJAX-compatible service contract.

  • Zugreifen auf den WCF AJAX-Dienst.Accessing WCF AJAX services.

Erstellen eines AJAX-EndpunktsCreating an AJAX Endpoint

Der einfachste Weg, AJAX-Unterstützunmg in einem WCFWCF-Dienst zu aktivieren, besteht darin, in der dem Dienst zugeordneten SVC-Datei die WebServiceHostFactory zu verwenden, wie im folgenden Beispiel gezeigt.The most basic way to enable AJAX support in a WCFWCF service is to use the WebServiceHostFactory in the .svc file associated with the service, as in the following example.

<%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.Alternatively, you can also use configuration to add an AJAX endpoint. Verwenden Sie die WebHttpBinding des Dienstendpunkts, und konfigurieren Sie diesen Endpunkt mit dem WebHttpBehavior, wie im folgenden Codeausschnitt dargestellt.Use the WebHttpBinding on the service endpoint and configure that endpoint with the WebHttpBehavior as shown in the following code snippet.

<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 Arbeitsbeispiel finden Sie unter der AJAX-Dienst mit JSON und XML-.For a working example, see the AJAX Service with JSON and XML.

Erstellen eines AJAX-kompatiblen DienstvertragsCreating an AJAX-Compatible Service Contract

Standardmäßig geben die über einem AJAX-Endpunkt verfügbar gemachten Dienstverträge Daten im XML-Format zurück.By default, service contracts exposed over an AJAX endpoint return data in the XML format. 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.Also, by default service operations are accessible through HTTP POST requests to URLs that include the endpoint address followed by the operation name, as shown in the following example.

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

Dieser Vorgang ist mit HTTP POST für http://serviceaddress/endpointaddress/GetCities und zurückgeben eine XML-Nachricht.This operation is accessible using an HTTP POST to http://serviceaddress/endpointaddress/GetCities and return an XML message.

Sie können das vollständige Webprogrammiermodell verwenden, um diese grundlegenden Aspekte anzupassen.You can use the full Web Programming Model to customize these basic aspects. 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.For example, you can use the WebGetAttribute or WebInvokeAttribute attributes to control the HTTP verb to which the operation responds or use the UriTemplate property of these respective attributes to specify custom URIs. Weitere Informationen finden Sie unterFor more information, seedie WCF Web-HTTP-Programmiermodell Thema. the WCF Web HTTP Programming Model topic.

Das JSON-Datenformat wird oft in AJAX-Diensten verwendet.The JSON data format is often used in AJAX services. Um einen Vorgang zu erstellen, der JSON statt XML zurückgibt, legen Sie die ResponseFormat-Eigenschaft (oder die ResponseFormat-Eigenschaft) auf Json fest.To create an operation that returns JSON instead of XML, set the ResponseFormat (or the ResponseFormat) property to Json. Die eigenständige JSON-Serialisierung Thema zeigt wie integrierte .NET Typen und Daten Vertrag Typen Zuordnung zu JSON.The Stand-Alone JSON Serialization topic shows how built-in .NET types and data contract types map to JSON.

Normalerweise bestehen JSON-Anforderungen und -Antworten aus nur einem Element.Normally, JSON requests and responses consist of just one item. Für den vorangehenden GetCities-Vorgang ähnelt die Anforderung der folgenden Anweisung.For the preceding GetCities operation, the request resembles the following statement.

"na"  

Die Antwort auf diese Anforderung ähnelt der folgenden Anweisung.The response to that request resembles the following statement.

["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.If the operation takes an extra parameter, the request style must be wrapped to wrap both parameters in a single JSON object. Ein Beispiel für eine JSON-Nachricht in diesem Stil finden Sie im folgenden Beispiel.An example of this style JSON message is in the following example.

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

Der folgende Vertrag akzeptiert diese Nachricht.The following contract accepts this message.

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

Zugreifen auf AJAX-DiensteAccessing AJAX Services

WCFWCFAJAX-Endpunkte akzeptieren immer sowohl JSON- als auch XML-Anforderungen. AJAX endpoints always accept both JSON and XML requests.

HTTP POST-Anforderungen mit einem Inhaltstyp "Application/Json" werden als JSON behandelt, und mit dem Inhaltstyp, die XML (z. B. "Text/Xml") angeben, werden als XML behandelt.HTTP POST requests with a content-type of "application/json" are treated as JSON, and those with content-type that indicate XML (for example, "text/xml") are treated as XML.

HTTP GET-Anforderungen enthalten alle Anforderungsparameter in der URL selbst.HTTP GET requests contain all the request parameters in the URL itself.

Es obliegt dem Benutzer zu entscheiden, wie die HTTP-Anforderung für den Endpunkt erstellt wird.It is up to the user to decide how to create the HTTP request to the endpoint. Der Benutzer kann umfassend steuern, wie das den Text der Anforderung bildende JSON erstellt wird.Also, the user has full control over constructing the JSON that forms the body of the request. Ein Beispiel für eine Anforderung aus JavaScript zu erstellen, finden Sie unter der AJAX-Dienst mit JSON und XML-.For an example of creating a request from JavaScript, see the AJAX Service with JSON and XML.