Я бы предложил создать одну страницу .aspx или HTTPHandler, а затем переопределить метод ProcessRequest.
public void ProcessRequest(HttpContext context)
{
//database table or PDF/word file
System.IO.MemoryStream mstream = GetData();
//Convert the memorystream to an array of bytes.
byte[] byteArray = mstream.ToArray();
string fileName= "test.pdf";
context.Response.Clear();
context.Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
context.Response.ContentType = "application/octet-stream";
context.Response.BinaryWrite(byteArray);
context.Response.Flush();
context.Response.End();
}
Ваше приложение Silverlight будет работать так же, как обычный клиент, и отправляет http-запрос, используя
<HyperlinkButton Content="Click Me" NavigateUri="Download.aspx?id=fileid" />
в коде выше
context.Response.AppendHeader("content-disposition", "attachment;
сообщает браузеру запросить диалог OPEn / Save.
Надеюсь, это сработает.