Passare oggetti javascript a ASP.net web services
domenica, novembre 8, 2009 16:37 scritto da neryoPer chi sviluppa applicazioni AJAX avanzate usando il framework Microsoft ASP.NET sa che è possibile esporre facilmente web services lato client utilizzando lo ScriptManager, ovvero è possibile richiamarli comodamente tramite javascript utilizzando chiamate a metodi omonimi. Questa funzionalità è senza dubbio parecchio comoda, soprattutto per chi sa che questi automatismi non sono così immediati programmando ad esempio in php, dove per fare richieste javascript a pagine web bisogna utilizzare costrutti e quindi crearsi tutto il codice di interfacciamento a metodi/pagine server side.
Come possiamo vedere da questo tutorial: Exposing Web Services to Client Script in ASP.net AJAX è semplice creare una classe che estende System.web.services.Webservice, contenente metodi che effettuano logiche server side e possono restituire dati lato client, e implementare funzionalità asincrone (AJAX) in modo molto naturale.
Al di là di questo aspetto (se non lo conoscete potete approfondirlo dall’articolo sopra linkato) che sostanzialmente riduce le tempistiche di sviluppo di callback asincrone, volevo affrontare qui in questo articoletto la possibilità di passare e restituire oggetti strutturati tramite web services per poi ritrovaseli nello stesso modo sia lato client sia lato server.
E’ infatti possibile definire una funzione callback javascript lato client che richiama un metodo web service e passargli l’oggetto objParams per poi elaborarlo lato server. Qui sotto un semplice esempio scritto sul momento:
-
-
function callback_sum() {
-
-
var objParams = new Object();
-
objParams .x = 2;
-
objParams .y = 3;
-
objParams.z = 0;
-
-
SimpleWebService.doSum(objParams, callback_sum_success, callback_sum_fail);
-
}
-
-
function callback_sum_success(res){
-
alert(res.z); //5
-
}
-
-
//gestire eventuali exception
-
function callback_sum_fail(ex){
-
//ex._message;
-
}
-
Lato server dobbiamo definire lo stesso oggetto (chiamato Sum) con le stesse proprietà dell’oggetto client side. N.B. Nell’esempio uso VB.net ma vale lo stesso in c#.net
-
-
-
Public Class SimpleWebService
-
Inherits System.Web.Services.WebService
-
-
<webmethod (True)> _
-
Public Function doSum(ByVal sumObj As Sum) As Sum
-
-
sumObj.z = sumObj.x + sumObj.y
-
-
return sumObj
-
-
End Function
-
-
Public Class Sum
-
Public x As Integer
-
Public y As Integer
-
Public z As Integer
-
End Class
-
-
End Class
-
</webmethod>
Come possiamo notare con questo metodo possiamo veramente sbizzarrirci a passare dei dati complessi da client a server e da server a client, migliorando sicuramente anche l’estendibilità e la chiarezza del codice, e aumentando a piacere il numero di parametri senza variare la firma del metodo del web service..ecc
Esistono però dei limiti sulle tipologie di dati più complessi tipici dei linguaggi moderni, ma rimando ad approfondimenti sui prossimi articoli..
Rifermenti:
http://www.asp.net/ajax/documentation/live/Tutorials/ExposingWebServicesToAJAXTutorial.aspx




