我正在尝试在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不支持此功能。
所以我的选择是:
有没有其他人尝试在Silverlight应用程序中使用企业SSRS功能并找到类似问题的解决方案?
答案 0 :(得分:0)
有一个组件 - PerpetuumSoft Viewers For SSRS(这是我需要承认的组件),它使用基于XAML的本机查看器在Silverlight应用程序中无缝集成SSRS报告。所以我们显然找到了解决方案。