In questo articolo vedremo come creare un web service .NET che espone un metodo in grado di restituire una stringa XML contenente delle informazioni complesse, che recupereremo e manipoleremo in una pagina ASP grazie all'utilizzo dell'XMLDOM.
Grazie al namespace "System.Xml.Serialization", è possibile infatti serializzare in XML, ovvero rendere persistente un certo oggetto sotto forma di XML, un tipo di dato definito dall'utente tramite la semplice creazione di una classe, con pochissime righe di codice.
Questo processo si rivela uno strumento molto utile quando è necessario restituire al client dei dati in formato complesso, come ad esempio array, il risultato di una query su un database, in quanto consente di superare i limiti di SOAP (e dei Toolkit che esistono attualmente) nella gestione dei tipi di dati complessi, creando e restituendo quindi una semplice stringa contenente però dell'XML.
In più, non dimentichiamo che restituire dati come XML è utilissimo quando il client gira su una piattaforma diversa da quella del server.
Il server
Vediamo subito la parte dell'esempio relativa al web service .NET.
Ecco il codice di xmlSerialization_memoryStream.asmx
<%@ WebService Language="vb" Class="SerializzaXml" %> Imports System Imports System.IO Imports System.Web.Services Imports System.Xml Imports System.Xml.Serialization Public Class SerializzaXml : Inherits WebService <WebMethod> public Function xmlDocument() As String Dim myOrdine as New Ordine Dim strXml as String ' Crea le istanze della classe "Item" e ne setta gli attributi Dim myItem As New Item() myItem.ID = 0 myItem.Prezzo = 10000 Dim myItem1 As New Item() myItem1.ID = 1 myItem1.Prezzo = 20000 ' Crea un array di tipo "Item" composto da 2 elementi Dim items(1) As Item ' sposto l'istanza di "Item" con i valori settati negli elementi dell'array items(0) = myItem items(1) = myItem1 ' Sposta nell'attributo "Items" della classe "Ordine" l'array di tipo "Item" myOrdine.Items = items 'Istanzio un MemoryStream che usa la memoria al posto del disco (capacità iniziale 4KB) Dim buffer As New MemoryStream(4096) Dim serializer As New XmlSerializer(GetType(Ordine)) serializer.Serialize(buffer,myOrdine) 'setta la posizione dello stream all'inizio buffer.seek(0,SeekOrigin.Begin) 'legge lo stream fino alla fine e lo mette nella stringa strXml = new StreamReader(buffer).readToEnd() ' chiude il MemoryStream buffer.close() ' ritorna la stringa che contiene l'XML return strXml End Function End Class <XmlRoot("Ordine")> Public Class Ordine <XmlArrayAttribute("Items")> Public Items() As Item End Class Public Class Item Public ID As Integer Public Prezzo As Integer End Class
Potete subito notare la classe "Ordine" è l'elemento chiave della serializzazione in XML. Essa infatti è un tipo di dato complesso formato da un array di due Integer (ID, Prezzo).
Questa viene istanziata all'interno del metodo "xmlDocument()", in cui viene riempito l'array con dei valori ed infine serializzata in XML l'intera classe.
Attenzione: Questo articolo contiene un allegato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.