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 ClassPotete 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
Contenuti dell'articolo
- Pagina 1
- Pagina 2
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà

Stampa
Download



