在内存中生成SSRS报告

时间:2016-12-02 12:24:51

标签: c# reporting-services reportviewer

我正致力于解决方案,在内存中生成SSRS报告,以便在邮件附件后附加。我使用的是2010版本。

报告需要填写的参数才能使报告正确无误。

我找不到解决方法如何做到这一点:

解决方案1 ​​

使用MS原生ReportViewer课程。我们可以使用控件API

在内存中实例化对象,连接到服务器并以所需格式呈现报表
report.ServerReport.ReportServerCredentials = new MyCredentials(...);
report.ServerReport.ReportServerUrl = new Uri("ssrs_url");
report.ServerReport.ReportPath = "path-to-report";

byte[] reportData = report.ServerReport.Render("excel");

解决方案有一个主要缺点 - 它需要大量的依赖关系才能使用报告控制。因此,在较低层具有有限且预定义的依赖关系集以便松散耦合并且易于移植到广泛的OS和云堆栈时,很难在分层体系结构中使用。

所以我不能在我的案例中采用这个解决方案

解决方案2

使用报表服务器公共API以所需格式访问数据。我发现这可以实现,MS证实了这一点。这是链接https://msdn.microsoft.com/en-us/library/ms154040.aspx

因此,我们可以使用正确配置的链接来访问数据:http://myrshost/ReportServer?/myreport&rs:Format=PDF

此解决方案最适合我的需求,但我不知道如何将报告参数传递给此报告?另外如何首先针对SSRS报告服务器进行身份验证?

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:3)

所以,最后还是写了一个答案。

首先:遗憾的是,在使用报告的简单URL访问时,我找不到任何方法来包含参数。我还没有真正合作过。因此,对于您的特定情况,可能还有另一种(更好的)解决方案。

关于第一个解决方案中规定的限制: 我实际上并没有看到你正在使用什么“框架”,但如果你不能使用它,那就无关紧要了。

我建议你使用SSRS WebServices,正如我在评论中已经说过的那样。有关它的基本信息可以找到here。基本上你只需要做一些简单的步骤:

  1. 使用WebService(它是一个SOAP服务)并让Visual Studio(.NET)为您生成代理类。网上有各种各样的教程。例如this one。我没有看到依赖关系存在任何问题,因为它只是一个WebService。

  2. 然后您就可以调用WebService了。代理为您生成了所有必需的类。

  3. 以下示例演示了调用,以及如何将参数传递给WebService(当然,这很容易实现)。请注意,该示例是为ReportExecution2005.asmx编写的。最新版本可能存在差异。

    var client = new ReportExecutionService();
    client.Url = "UrlToReportExecutionASMXonYourServer";
    client.Credentials = yourCredentials // (is of type System.Net.ICredentials)
    
    client.LoadReport2("RelativePathToYourReportOnServer", null);
    
    var parameters = new ParameterValue[amountOfYourParameters];
    parameters[0] = new ParameterValue() { Name = "ParamNameInReport", Value = "Value" };
    client.SetExecutionParameters(parameters, CultureInfo.CurrentCulture.Name.ToLowerInvariant());
    
    string encoding, mimeType, extension, deviceInfo;
    Warning[] warnings;
    string[] streamIDs;
    var result = client.Render("ExportFormatOfDesiredResult", deviceInfo,  out extension, out encoding, out mimeType, out warnings, out streamIDs);
    

    “ExportFormatOfDesiredResult”可以替换为“Xml”,“Pdf”,“Word”等。 一世 您的结果将是一个字节流,您可以将其返回到您的客户端,附加到邮件或任何您想要用它做的事情。

    我希望这会对你有所帮助。如果由于任何原因不适合您的需要,请随时请求进一步的帮助或让我知道。 (请添加您的架构的详细说明及其限制,因为我目前不了解您需要什么以及您不能做什么。)