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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Fornire parametri ad un Web component HTML
Gestire progetti .NET + React in .NET Aspire
Gestire progetti NPM in .NET Aspire
Implementare il throttle in JavaScript
Gestire codice JavaScript con code splitting e lazy loading
Introduzione ai web component HTML
Gestione degli eventi nei Web component HTML
Gestire gli errori nelle Promise JavaScript con try()
Evitare memory leaks nelle closure JavaScript


