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

Using WebClient to post data to an SSRS reporting server

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

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

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)
}

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

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

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

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

谢谢!

这很简单。 :)

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

所有这些程序集都可以通过 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
};

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

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);

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