As part of this app I needed to send some fairly chunky bits of data to the client. To do this I used http://whydoidoit.com/silverlight-serializer/ and http://slsharpziplib.codeplex.com/
On the server (in an offline process) the code that generated my compressed files looked like:
using (var f = File.Create(zipFileName))
{
using (var zipOut = new ZipOutputStream(f))
{
ZipEntry entry = new ZipEntry("stuff");
var toStore = Serialization.SilverlightSerializer.Serialize(myClass);
entry.DateTime = DateTime.Now;
entry.Size = toStore.Length;
zipOut.PutNextEntry(entry);
zipOut.Write(toStore, 0, toStore.Length);
zipOut.Finish();
zipOut.Close();
}
}
And in the Silverlight client the code looked like:
public void LoadFrom(Uri url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
}
private void ReadCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
using (ZipInputStream zipIn = new ZipInputStream(response.GetResponseStream()))
{
ZipEntry entry;
if ((entry = zipIn.GetNextEntry()) != null)
{
var myClass = Serialization.SilverlightSerializer.Deserialize<TheClass>(zipIn);
if (myClass == null)
{
MessageBox.Show("Some error has occurred - unable to read data - sorry!");
return;
}
Dispatcher.BeginInvoke(() =>
{
// do stuff with myClass here
});
}
}
}
It all worked surprisingly well :)
No comments:
Post a Comment