Invocare servizi WCF da Javascript

di Cristian Civera, in Windows Communication Foundation,

Con il rilascio del .NET Framework 3.5 SP1 attraverso una nuova dll di nome System.ServiceModel.Web è stato inserito in Windows Communication Foundation un nuovo webHttpBinding che pur basandosi su HTTP, semplifica i messaggi di scambio permettendo di eseguire operazioni con semplici chiamate REST o POX.

Questo consente da una parte di poter sviluppare servizi con il medesimo approccio, ma allo stesso tempo, rinunciando a caratteristiche di sicurezza e in generale di WS-*, di poterlo invocare anche tramite browser.

Sebbene con XmlHttpRequest e con i framework su di esso costruiti, come ad esempio jQuery, è piuttosto semplice effettuare una richiesta GET o POST, è necessario conoscere gli URI delle operazioni e l'XML da inviare al servizio, rendendo quindi meno immediata l'implementazione.

Il binding messo a disposizione da WCF però, si riserva un path /js che permette di ottenere un file JS autogenerato che contiene i prototipi delle classi che rappresentano il servizio e le strutture dei dati utilizzati, il tutto appoggiandosi sulle API AJAX sviluppate da Microsoft e fornendo un approccio del tutto simile al codice che in genere si utilizza in un'applicazione .NET.

Si ponga quindi di avere il seguente servizio esposto via webHttpBinding.

[ServiceContract()]
public class IMyService
{
  [WebGet()]
  string GetDate()
}

public class MyService : IMyService
{ 
  public string GetDate()
  { 
    return DateTime.Now();
  } 
}

Nel file configurazione il servizio dev'essere impostato in modo che usi il binding appropriato ed i relativi behavior.

<system.serviceModel> 
  <services> 
    <service name="MyService"> 
      <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="IMyService" /> 
    </service> 
  </services> 
  <behaviors> 
    <endpointBehaviors> 
      <behavior name="webBehavior"> 
        <webHttp /> 
      </behavior> 
    </endpointBehaviors> 
  </behaviors> 
</system.serviceModel>

E' possibile ottenere lo script JS autogenerato richiamando il servizio seguito da /js. Ad esempio http://miosito/MyService.svc/js. Lo script ottenuto può quindi essere referenziato in una pagina HTML, insieme a quello della libreria AJAX di Microsoft, permettendo di istanziare e chiamare facilmente il servizio.

<script type="text/javascript">

function go()
{
  var s = new MyService();
  s.GetDate(OnGetDate, OnError);
}

function OnGetDate(result)
{
  alert(result);
}

function OnError(e)
{
  alert(e.get_Message());
}

</script>

Da notare inotre che se il servizio dispone di operazioni che accettano tipi complessi, nello script JS si ritrovano anche i corrispettivi prototipi.
In ASP.NET, utilizzando l'oggetto ScriptReference, è sufficiente utilizzare la collezione Scripts indicando il percorso al file svc.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi