Condividi tramite


Creazione di servizi WCF AJAX senza ASP.NET

È possibile accedere ai servizi AJAX di Windows Communication Foundation (WCF) da qualsiasi pagina Web abilitata per JavaScript, senza richiedere ASP.NET AJAX. In questo argomento viene descritto come creare un servizio WCF di questo tipo.

Per istruzioni sull'uso di WCF con ASP.NET AJAX, vedere Creazione di servizi WCF per ASP.NET AJAX.

Esistono tre parti di una creazione di un servizio WCF AJAX:

  • Creazione di un endpoint AJAX a cui sia possibile accedere dal browser.

  • Creazione di un contratto di servizio compatibile con AJAX.

  • Accesso ai servizi WCF AJAX.

Creazione di un endpoint AJAX

Il modo più semplice per attivare il supporto AJAX in un servizio WCF consiste nell'usare WebServiceHostFactory nel file con estensione SVC associato al servizio, come illustrato nell'esempio seguente.

<%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. Usare WebHttpBinding sull'endpoint del servizio e configurare tale endpoint con WebHttpBehavior, come illustrato nel frammento di codice seguente.

<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 Servizio AJAX con JSON e XML.

Creazione di un contratto di servizio compatibile con AJAX

Per impostazione predefinita, i contratti di servizio esposti su un endpoint AJAX restituiscono dati in formato XML. 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.

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

Questa operazione è accessibile tramite HTTP POST per http://serviceaddress/endpointaddress/GetCities e restituire un messaggio XML.

È possibile usare il Modello di programmazione Web completo per personalizzare questi aspetti di base. 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. Per altre informazioni, vedere l'argomento Modello di programmazione HTTP Web WCF.

Nei servizi AJAX viene spesso usato il formato dati JSON. Per creare un'operazione che restituisce JSON invece di XML, impostare la proprietà ResponseFormat (o ResponseFormat) su Json. L'argomento Serializzazione JSON autonoma illustra il mapping dei tipi .NET e dei tipi di contratto dati predefiniti a JSON.

In genere, le richieste e le risposte JSON sono costituite da un solo elemento. Nell'operazione GetCities precedente, la richiesta assomiglia all'istruzione seguente.

"na"  

La risposta a questa richiesta è simile all'istruzione seguente.

["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. Un esempio di questo stile di messaggio JSON è riportato nell'esempio seguente.

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

Il contratto seguente accetta questo messaggio.

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

Accesso ai servizi AJAX.

Gli endpoint WCF AJAX accettano sempre richieste JSON e XML.

Le richieste HTTP POST con il tipo di contenuto "application/json" vengono trattate come JSON, mentre quelle con tipo di contenuto che indica XML, ad esempio "text/xml", vengono trattate come XML.

Le richieste HTTP GET contengono tutti i parametri di richiesta presenti nell'URL stesso.

Spetta all'utente decidere come creare la richiesta HTTP per l'endpoint. Inoltre, l'utente ha il pieno controllo sulla costruzione del codice JSON che forma il corpo della richiesta. Per un esempio di creazione di una richiesta da JavaScript, vedere Servizio AJAX con JSON e XML.