0

我正在尝试在 Silverlight 5 应用程序中实现 SSRS 报告功能,该应用程序在浏览器模式下运行。

尝试 1) 最初的计划是在 Silverlight 客户端上使用 URL 技术呈现页面

var path = item.Path; // Where item.Path is something like '/MyReportFolder/Report1'
var url= @"http://<MyServerAddress>/ReportServer/Pages/ReportViewer.aspx?{0}&rs:Command=Render";
var completeUrl = string.Format(url, path.Replace(@"/", "%2f").Replace(" ", "+"));
System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(completeUrl), "_newWindow", "toolbar=0,menubar=0,resizeable=1,scrollbars=1");

这里的问题是调用此 URL 的权限将难以管理,并且与 Silverlight 应用程序运行的基本安全性无关。

尝试 2) 通过 WebClient 中的类似 Url 调用在 IIS 服务器上(而不是在客户端,代表用户通过 WCF 调用)呈现报告并下载 byte[] 输出,然后发送 byte[ ] 到 Silverlight 客户端(作为对 WCF 调用的响应),然后在 Silverlight 应用程序中呈现内容。

var path = itemPath;
var url = @"http://<MyServerAddress>/ReportServer/Pages/ReportViewer.aspx?{0}&rs:Command=Render";
var completeUrl = string.Format(url, path.Replace(@"/", "%2f").Replace(" ", "+"));

var tcs = new TaskCompletionSource<byte[]>();
var webClient = new WebClient();

webClient.DownloadDataCompleted += (sender, args) => tcs.TrySetResult(args.Error != null ? args.Result : new byte[0]);
webClient.DownloadDataAsync( new Uri(completeUrl));
return tcs.Task;

也可以将报告呈现为 byte[],并且可以通过 WCF 服务操作调用轻松处理安全性。但是,一旦客户端收到 byte[],我不知道如何在屏幕上显示结果。我的偏好是打开一个新的浏览器窗口并将内容呈现到其中,但是 System.Windows.Browser.HtmlPage.Window 不支持这一点。

所以我的选择是:

  1. 将 IIS 服务器上的结果呈现到一个临时文件并将 URL(而不是 byte[])发送到 Silverlight 客户端,以便浏览器客户端可以打开结果。这是一个糟糕的结果,因为结果与尝试 1非常相似,因为 URL 可供第三方接收者使用
  2. 将报告呈现为 TIFF 字节 [],但是我不确定这将处理多页报告,并且它可能不支持 PDF 和 XLS 报告内容,因为 TIFF 需要显示在 Silverlight 图像控件中,而不是浏览器。
  3. 我还没有考虑过其他一些很棒的选择......

是否有其他人尝试在 Silverlight 应用程序中使用企业 SSRS 功能并找到类似问题的解决方案?

4

1 回答 1

0

有一个组件 - PerpetuumSoft Viewers For SSRS(这是我们需要承认的组件),它使用基于 XAML 的原生查看器将 SSRS 报告无缝集成到 Silverlight 应用程序中。所以我们显然找到了解决方案。

于 2013-04-11T11:32:16.147 回答