Serializzare jpg in XML

lunedì 08 marzo 2010 - 17.13

gmt Profilo | Junior Member

Salve, ho creato un web service che per un metodo restituisce un
System.Xml.XmlDocument
con delle notizie (tutte testo). Ora vorrei anche ritornare un'immagine jpg prelevata da file system o campo image di SQL Server, in modo che poi il consumenr del WS la visualizzi nel proprio browser.
Non so come fare potete darmi una mano? Anche indicandomi degli articoli da leggere, Grazie.

freeteo Profilo | Guru

>Salve, ho creato un web service che per un metodo restituisce
>un System.Xml.XmlDocument
c'è un motivo particolare per cui usi di ritorno un XmlDocument?

Io ti consiglierei di ragionare in termine di oggetti e far tornare al tuo WebService una collection (array) di questi oggetti, i quali oggetti hanno delle proprietà che ti interessano.

Tecnicamente un webservice parla già in Xml (anzi più precisamente in SOAP) e quindi tutti vengono poi serializzati in questo formato (serializzazione), solo che lato client vengono utilizzati tramite oggetti (deserializzazione), quindi puoi accedere ai valori delle sue proprietà.
Tutto questo processo è trasparente a te come developer, si arrangia il motore del framework in automatico...è una cosa molto comoda e sinceramente puoi pensare ad avere la complessità che vuoi sulle varie proprietà, ad esempio nel tuo caso proprio un byte[] che sia effettivamente l'immagine letta dal disco.

Quindi morale della favola,tradotto in codice C# io farei qualcosa di questo tipo:

public class MioOggetto { public int ID { get; set; } public string Testo { get; set; } public byte[] Immagine { get; set; } ...etc... }

nel webservice usi un metodo che te ne torna uno o più:
[WebMethod] public MioOggetto[] GetOggetti() { List<MioOggetto> lista = new List<MioOggetto>(); ... MioOggetto o = new MioOggetto(); o.ID = 1; o.Testo = "..."; o.Immagine = File.ReadAllBytes("c:...immagine.jpg"); ... lista.Add(o); return lista.ToArray(); }

Lato client, quando referenzi il webservice, lui scopre che un suo metodo torna oggetti di tipo "MioOggetto" e quindi sa come recuperarli e gestirli dandoti già l'intellisense corretto, senza che tu debba fare niente (a parte chiaramente referenziarlo).

Avrai quindi disponibile l'immagine direttamente come byte[], e quindi ti basta portarla in un oggetto Bitmap o Image del Namespace System.Drawing con i metodi relativi e puoi farci quello che vuoi...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

gmt Profilo | Junior Member

Rispondo con molto ritardo.. me meglio tardi che mai.
Cecherò di seguire il tuo consiglio, per il momento ho fatto con XmlDocument che mi è risultato piu' semplice da visualizzare lato client con un un oggetto XML a cui passo il risultato del WS e un documento xslt tramite TransformSource.
Mi visualizza tutto in maniera ottimale e implementato già in 3 progetti senza problemi.
Comunque voglio provare come mi dici tu.. Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5