使用 WebClient 将数据发布到 SSRS 报告服务器

Sky*_*ell 2 c# reporting-services c#-4.0 ssrs-2008-r2 ssrs-2012

我正在尝试连接到 SSRS 服务器并通过 .NET webClient 获取报告数据。我这样做是因为我无法使用表单,并且我不想将用户发送到报表服务器。我宁愿将所有内容都保留在我的网络应用程序中。

所以我在控制器中有这段代码:

public IHttpActionResult GetSpecs(int Id)
{               
     var client = new WebClient();
     client.Credentials = new System.Net.NetworkCredential("username", "pw", "domain");
     var data = client.DownloadString(ReportServerUrl + "?%2fFactory+Specs+Reports%2fSpecs_Stats_Matrix&rs:Command=Render&a=" + Id + "&b=" + CurrentUser.Id);
     return Ok(data)
}
Run Code Online (Sandbox Code Playgroud)

它成功连接到 SSRS 服务器,并且确实获取了数据。检查数据,看起来这就是我需要的报告,但它只是 SSRS 服务器吐出的一大串 html 和 javascript。

我的问题是,有没有好的方法来处理这些数据?

我处于陌生的领域,似乎没有很多人以这种方式与 SSRS 交互。

我不太确定如何向最终用户显示所有数据。

谢谢!

Ste*_*old 5

那很容易。:)

首先,您需要一些程序集来访问报告服务。

组件

所有这些程序集都很容易通过 Nuget 包含在您的项目中,

努格特

之后,您需要像这样连接到 SSRS 服务实例:

using Microsoft.Reporting.WebForms;

CustomReportCredentials reportServerCredentials = new CustomReportCredentials("User", "Password", "REPORTINGSERVER");

ServerReport report = new ServerReport()
{
    ReportServerUrl = new Uri("https://reporting.xxxx.com/ReportServer"),
    ReportServerCredentials = reportServerCredentials,
    ReportPath = "/Reports/MyReport",
    Timeout = 200000
};
Run Code Online (Sandbox Code Playgroud)

向服务询问支持的渲染扩展并生成报告:

var renderExtentions = report.ListRenderingExtensions();
report.SetParameters(new ReportParameter[]
{
    new ReportParameter("parameter1", dcStringID.ToString()),
    new ReportParameter("parameter2", begin.ToString()),
    new ReportParameter("parameter3", end.ToString())
});

String mineType = String.Empty;
String fileNameExtention = String.Empty;

Stream stream = report.Render(renderExtentions.First(), null, null, out mineType, out fileNameExtention);
Run Code Online (Sandbox Code Playgroud)

此时您将拥有所需的一切。流、矿场类型、文件扩展名。