Servizio AJAX di base

L’esempio SimpleAjaxService illustra come usare Windows Communication Foundation (WCF) per creare un servizio AJAX (ASP.NET Asynchronous JavaScript and XML) di base, ovvero un servizio al quale è possibile accedere usando codice JavaScript da un client browser Web. Il servizio usa l'attributo WebGetAttribute per garantire che il servizio risponda alle richieste HTTP GET ed è configurato per usare il formato dati JSON (JavaScript Object Notation) per le risposte.

Il supporto AJAX in WCF è ottimizzato per l'uso con ASP.NET AJAX tramite il controllo ScriptManager. Per un esempio di utilizzo di WCF con ASP.NET AJAX, vedere gli esempi AJAX.

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

Nel seguente codice, l'attributo WebGetAttribute viene applicato all'operazione Add per assicurare che il servizio risponda alle richieste HTTP GET. Il codice usa GET per semplicità (è possibile costruire una richiesta HTTP GET da qualsiasi browser Web). È inoltre possibile usare GET per abilitare la memorizzazione nella cache. HTTP POST è l'impostazione predefinita nel caso in cui l'attributo WebGetAttribute non sia presente.

[ServiceContract(Namespace = "SimpleAjaxService")]
public interface ICalculator
{
    [WebGet]
    double Add(double n1, double n2);
    //Other operations omitted…
}

Nel file di esempio con estensione svc viene usato WebScriptServiceHostFactory, che aggiunge un endpoint standard WebScriptEndpoint al servizio. Tale endpoint viene configurato in un indirizzo vuoto relativo al file con estensione svc. Ciò significa che l'indirizzo del servizio è http://localhost/ServiceModelSamples/service.svc, senza suffissi aggiuntivi diversi dal nome dell'operazione.

<%@ServiceHost language="C#" Debug="true" Service="Microsoft.Samples.SimpleAjaxService.CalculatorService" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>

L'oggetto WebScriptEndpoint è pre-configurato in modo che una pagina client AJAX ASP.NET sia in grado di accedere al servizio. La sezione seguente in Web.config può essere usata per effettuare modifiche di configurazione aggiuntive all'endpoint e può essere rimossa se tali modifiche non sono necessarie.

<system.serviceModel>
  <standardEndpoints>
    <webScriptEndpoint>
      <!-- Use this element to configure the endpoint -->
      <standardEndpoint name=""  />
    </webScriptEndpoint>
  </standardEndpoints>
</system.serviceModel>

L'oggetto WebScriptEndpoint imposta il formato dei dati predefinito per il servizio su JSON anziché su XML. Per richiamare il servizio, passare a http://localhost/ServiceModelSamples/service.svc/Add?n1=100&n2=200 dopo aver completato i passaggi di configurazione e compilazione illustrati più avanti in questo argomento. Questa semplice funzionalità di test viene abilitata dall'uso di una richiesta HTTP GET.

La pagina Web SimpleAjaxClientPage.aspx del client contiene il codice ASP.NET per richiamare il servizio quando l'utente fa clic su uno dei pulsanti di operazione nella pagina. Il controllo ScriptManager viene usato per rendere accessibile un proxy al servizio tramite JavaScript.

<asp:ScriptManager ID="ScriptManager" runat="server">
    <Services>
        <asp:ServiceReference Path="service.svc" />
    </Services>
</asp:ScriptManager>

Viene creata un'istanza del proxy locale e le operazioni vengono richiamate usando il codice JavaScript seguente.

// Code for extracting arguments n1 and n2 omitted…
// Instantiate a service proxy
var proxy = new SimpleAjaxService.ICalculator();
// Code for selecting operation omitted…
proxy.Add(parseFloat(n1), parseFloat(n2), onSuccess, onFail, null);

Se la chiamata al servizio riesce, il codice richiama il gestore onSuccess e il risultato dell'operazione viene visualizzato in una casella di testo.

function onSuccess(mathResult){
     document.getElementById("result").value = mathResult;
}