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 le Cache API di JavaScript per salvare elementi nella cache del browser
Generare file per il download da Blazor WebAssembly
Utilizzare la libreria Benchmark.NET per misurare le performance
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Load test di ASP.NET Core con k6
Eseguire operazioni con timeout in React