In quest'ultimo periodo stò apprezzando sempre di più il grande lavoro che stato fatto dietro a WCF(Windows Communication Foundation) sopratutto nell'ottica sempre più diffusa dell'applicazioni a Servizio SaaS.
Ancora di più se la pensiamo con la tecnologia Rest che ci permette di creare un servizio WCF che possa essere consumato non come servizio ma come url.
Esempio molto comune e la possibilità di recuperare le immagini da un file server come se fosse un webserver.
Per fare questo come facciamo?
Dobbiamo creare un OperationContract che come valore di ritorno ha uno stream e inoltre bisogna "contornarlo" di un'attributo WebGet(UriTemplate = "GetImage?name={name}")] che permette di consumare il servizio tramite Rest
Es.
[
WebGet(UriTemplate = "GetData?name={name}")]
[
OperationContract]
public Stream GetData(string name)
{
byte[] buffer = null;
string path = System.IO.Path.Combine(@"c:\temp\", name);
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
buffer =
new byte[fs.Length];
fs.Read(buffer, 0, (
int)fs.Length);
}
MemoryStream ms = new MemoryStream(buffer);
//stream di ritorno
MemoryStream msreturn = new MemoryStream();
Bitmap image = new Bitmap(ms);
image.Save(msreturn, System.Drawing.Imaging.
ImageFormat.Jpeg);
msreturn.Position = 0;
//imposto il contentype del response
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
return msreturn;
}
In questo modo possiamo richiamare direttamente l'immagine tramite url
es.
http://localhost/servicerest/myservice.svc/getimage?name=file.jpg
Tuttò ciò rimane ancora più utile per recupare le immagini tramite Silverlight dove possiamo scrivere direttamente
Image
img = new Image();
BitmapImage image = new BitmapImage(new Uri("http://localhost/servicerest/myservice.svc/getimage?name=file.jpg", UriKind.Absolute));
img.Source = image;
e poi si aggiunge al controllo Canvas o Grid che si voglia.
Se volete approfondire il discorso di wcf e rest vi consiglio questi link
http://www.codeplex.com/aspnet/Wiki/View.aspx?title=WCF%20REST
http://www.pluralsight.com/main/screencasts/default.aspx