Creazione di servizi WCF AJAX senza ASP.NETCreating WCF AJAX Services without ASP.NET

Servizi AJAX Windows Communication Foundation (WCF) sono accessibili da qualsiasi pagina Web compatibile con JavaScript, senza necessità di ASP.NET AJAX.Windows Communication Foundation (WCF) AJAX services can be accessed from any JavaScript-enabled Web page, without requiring ASP.NET AJAX. In questo argomento viene descritto come creare un servizio WCF.This topic describes how to create such a WCF service.

Per istruzioni sull'uso di WCF con ASP.NET AJAX, vedere creazione di servizi WCF per ASP.NET AJAX.For instructions on using WCF with ASP.NET AJAX, see Creating WCF Services for ASP.NET AJAX.

Esistono tre parti per la creazione di un servizio AJAX WCF:There are three parts to a creating a WCF AJAX service:

  • Creazione di un endpoint AJAX a cui sia possibile accedere dal browser.Creating an AJAX endpoint that can be accessed from the browser.

  • Creazione di un contratto di servizio compatibile con AJAX.Creating an AJAX-compatible service contract.

  • Accesso ai servizi WCF AJAX.Accessing WCF AJAX services.

Creazione di un endpoint AJAXCreating an AJAX Endpoint

Il modo più semplice per abilitare il supporto AJAX in un servizio WCF consiste nell'utilizzare il WebServiceHostFactory nel file con estensione svc associato al servizio, come nell'esempio seguente.The most basic way to enable AJAX support in a WCF 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  
%>  

In alternativa, è anche possibile usare la configurazione per aggiungere un endpoint AJAX.Alternatively, you can also use configuration to add an AJAX endpoint. Usare WebHttpBinding sull'endpoint del servizio e configurare tale endpoint con WebHttpBehavior, come illustrato nel frammento di codice seguente.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>  

Per un esempio funzionante, vedere il servizio AJAX con JSON e XML.For a working example, see the AJAX Service with JSON and XML.

Creazione di un contratto di servizio compatibile con AJAXCreating an AJAX-Compatible Service Contract

Per impostazione predefinita, i contratti di servizio esposti su un endpoint AJAX restituiscono dati in formato XML.By default, service contracts exposed over an AJAX endpoint return data in the XML format. Inoltre, le operazioni del servizio sono accessibili, per impostazione predefinita, tramite richieste HTTP POST agli URL che includono l'indirizzo endpoint seguito dal nome dell'operazione, come illustrato nell'esempio seguente.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);  

Questa operazione è accessibile tramite una richiesta POST HTTP a http://serviceaddress/endpointaddress/GetCities e restituire un messaggio XML.This operation is accessible using an HTTP POST to http://serviceaddress/endpointaddress/GetCities and return an XML message.

È possibile usare il Modello di programmazione Web completo per personalizzare questi aspetti di base.You can use the full Web Programming Model to customize these basic aspects. Ad esempio, è possibile usare gli attributi WebGetAttribute o WebInvokeAttribute per controllare il verbo HTTP al quale risponde l'operazione o usare la proprietà UriTemplate di questi rispettivi attributi per specificare gli URI personalizzati.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. Per altre informazioni, vedere la modello di programmazione HTTP Web WCF argomento.For more information, see the WCF Web HTTP Programming Model topic.

Nei servizi AJAX viene spesso usato il formato dati JSON.The JSON data format is often used in AJAX services. Per creare un'operazione che restituisce JSON invece di XML, impostare la proprietà ResponseFormat (o ResponseFormat) su Json.To create an operation that returns JSON instead of XML, set the ResponseFormat (or the ResponseFormat) property to Json. Il della serializzazione JSON autonoma argomento viene illustrato come predefinito .NET dati e i tipi di contratto mapping dei tipi in JSON.The Stand-Alone JSON Serialization topic shows how built-in .NET types and data contract types map to JSON.

In genere, le richieste e le risposte JSON sono costituite da un solo elemento.Normally, JSON requests and responses consist of just one item. Nell'operazione GetCities precedente, la richiesta assomiglia all'istruzione seguente.For the preceding GetCities operation, the request resembles the following statement.

"na"  

La risposta a questa richiesta è simile all'istruzione seguente.The response to that request resembles the following statement.

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

Se l'operazione accetta un parametro aggiuntivo, lo stile della richiesta deve essere "incapsulato", per eseguire il wrapping di entrambi parametri in un solo oggetto JSON.If the operation takes an extra parameter, the request style must be wrapped to wrap both parameters in a single JSON object. Un esempio di questo stile di messaggio JSON è riportato nell'esempio seguente.An example of this style JSON message is in the following example.

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

Il contratto seguente accetta questo messaggio.The following contract accepts this message.

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

Accesso ai servizi AJAX.Accessing AJAX Services

Gli endpoint AJAX WCF accettano sempre richieste JSON e XML.WCF AJAX endpoints always accept both JSON and XML requests.

Le richieste HTTP POST con un tipo di contenuto di "application/json" vengono trattate come JSON e quelle con tipo di contenuto che indica XML (ad esempio, "text/xml") vengono trattati come XML.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.

Le richieste HTTP GET contengono tutti i parametri di richiesta presenti nell'URL stesso.HTTP GET requests contain all the request parameters in the URL itself.

Spetta all'utente decidere come creare la richiesta HTTP per l'endpoint.It is up to the user to decide how to create the HTTP request to the endpoint. Inoltre, l'utente ha il pieno controllo sulla costruzione del codice JSON che forma il corpo della richiesta.Also, the user has full control over constructing the JSON that forms the body of the request. Per un esempio di creazione di una richiesta da JavaScript, vedere il servizio AJAX con JSON e XML.For an example of creating a request from JavaScript, see the AJAX Service with JSON and XML.