如何将服务调用的结果作为文件返回?

时间:2012-05-11 17:10:31

标签: silverlight wcf-ria-services

我有一个Silverlight应用程序,它获取联系人列表并在数据网格中显示它们。该应用程序还需要支持将联系人导出到Excel并将联系人打印为HTML页面。

我正在使用WCF RIA服务在Silverlight客户端上构建大部分查询,然后服务器也会在查询中添加一些其他where子句。

我正在试图找出是否有办法使用ASP.Net页面运行查询结果,该页面将格式化它们并提示用户下载结果(或打印结果)。

我想到的唯一想法是将IQueryable对象保存为服务器端的变量,并将密钥返回到Silverlight页面。然后将密钥传递给Export.aspx或Print.aspx,它将获取查询结果并返回它们。

有更好的想法吗?

似乎必须有一种更好的方式,我只是没想到。

3 个答案:

答案 0 :(得分:0)

不幸的是,没有更好的方法,至少我所知道的。我们一直在研究这个用于Silverlight的Excel导出。我们尝试使用网址打开一个新的浏览器窗口,但是您无法添加任何标头或PUT数据,这正是我们所需要的。因此,除非您可以在URL中完全编码您的查询,否则此方法将无效。

我们将实施的方法是将导出的结果保存在存储中,并返回此结果的键,如您在问题中所述。

另一方面,它确实允许一些不错的功能,例如启用发送资源的链接。这当然会带来所有权限等问题。

答案 1 :(得分:0)

经过大量的工作和研究,我终于能够做到这一点。为了使其工作,我不得不在Silverlight端使用一些WCF RIA Services内部类(通过反编译)来生成正确的查询字符串以传递到ASP.Net页面。然后在服务器端,我不得不反编译更多的类来解析查询字符串并将其转换为有效的Linq查询。现在一切正常,我可以在后面的代码中运行查询并将结果作为文件输出。

如果有人有兴趣让我知道,我可以尝试分享血腥细节。谢谢!

答案 2 :(得分:-1)

我已在客户端使用ExcelLite成功生成Excel文件。然后,提示用户使用“保存文件”对话框。您可以通常为datagrids执行此操作。输出HTML并不困难。