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
Gestire progetti .NET + React in .NET Aspire
Fornire parametri ad un Web component HTML
Gestire codice JavaScript con code splitting e lazy loading
Gestire gli errori nelle Promise JavaScript con try()
Implementare il throttle in JavaScript
Gestire progetti NPM in .NET Aspire
Introduzione ai web component HTML
Evitare memory leaks nelle closure JavaScript
Gestione degli eventi nei Web component HTML
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Sfruttare una CDN con i bundle di ASP.NET
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Le DirectInk API nella Universal Windows Platform
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Gli oggetti CallOut di Expression Blend 4.0
- Inserire le news di Punto Informatico nel proprio sito


