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
Utilizzare AbortController per cancellare operazioni asincrone in JavaScript
Creare una cache temporanea in JavaScript
Usare la parola chiave field per semplificare la scrittura di proprietà in C#
Applicare il progressive enhancement in applicazioni web
Gestire il ciclo di vita di AbortController in Javascript
Shadow DOM open e closed sulla gestione delle pagine
Operazioni tra insiemi di array in Javascript
Utilizzare noopener e noreferrer nei link HTML
Cache temporanea in Javascript con oggetti
Creare popup e menu nativi in HTML con la Popover API


