Asp.net mvc 直接导出SSRS报告,而不在ReportViewer上呈现

Asp.net mvc 直接导出SSRS报告,而不在ReportViewer上呈现,asp.net-mvc,wcf,c#-4.0,reporting-services,Asp.net Mvc,Wcf,C# 4.0,Reporting Services,我有一组托管在报表服务器实例上的RDL报表。有些报告在ReportViewer上呈现了超过100000条记录。因此,在查看器上渲染它需要相当长的时间。因此,我们决定根据报告的用户输入参数以及导出文件格式,直接从服务器导出内容 这里最重要的是,我不希望用户等到导出文件可供下载时才使用。相反,用户可以提交操作并继续执行其他工作。在后台,程序必须将文件导出到某个物理位置。当下载可用时,用户将收到有关导出文件的一些通知 我在这里找到了出路。我需要知道实现上述功能的方法以及如何传递报告的输入参数。我建议我

我有一组托管在报表服务器实例上的
RDL报表
。有些报告在ReportViewer上呈现了超过100000条记录。因此,在查看器上渲染它需要相当长的时间。因此,我们决定根据报告的用户输入参数以及导出文件格式,直接从服务器导出内容

这里最重要的是,我不希望用户等到导出文件可供下载时才使用。相反,用户可以提交操作并继续执行其他工作。在后台,程序必须将文件导出到某个物理位置。当下载可用时,用户将收到有关导出文件的一些通知

我在这里找到了出路。我需要知道实现上述功能的方法以及如何传递报告的输入参数。我建议我

注意:我使用XML作为rdl报告的数据源。

编辑

我发现了一些有用的东西,并像下面那样进行了编码

string path = ServerURL +"?" + _reportFolder + "ReportName&rs:Command=Render&rs:Format=PDF";
                WebRequest req = WebRequest.Create(path);
                string reportParametersQT = String.Empty;
                req.Credentials = CredentialCache.DefaultNetworkCredentials;

                WebResponse response = req.GetResponse();
                Stream stream = response.GetResponseStream();
                //screen.Response.Clear();
                string enCodeFileName = HttpUtility.UrlEncode("fileName.pdf", System.Text.Encoding.UTF8);

                // The word attachment in Addheader is used to directly show the save dialog box in browser
                Response.AddHeader("content-disposition", "attachment; filename=" + enCodeFileName);
                Response.BufferOutput = false;   // to prevent buffering
                Response.ContentType = response.ContentType;
                byte[] buffer = new byte[1024];
                int bytesRead = 0;
                while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    Response.OutputStream.Write(buffer, 0, bytesRead);
                }
                Response.End();

我可以下载导出的文件。但需要将文件保存在物理位置,而不是下载。我不知道怎么做。

这两件事都很容易做到。实际上,您只需在正在调用的URL中传递参数,例如,对于名为“LearnerList”的参数,您将
&LearnerList=12345
添加到URL中。对于导出,请为
Format=PDF
(或您希望文件作为的任何文件)添加一个附加参数,以将报表导出为PDF格式,而不是在报表查看器中生成

下面是一个示例URL:

https://reporting.MySite.net/ReportServer/Pages/ReportViewer.aspx?/Users+Folders/User/My+Reports/Learner+Details&rs:Format=PDF&LearnerList=202307
阅读这两页,你应该是黄金:


客户端是Web浏览器吗?服务器和用户是否可以访问物理位置?是的,它是一个Web浏览器,服务器和用户都可以访问。基本上,用户将发送导出报告请求,并可以继续处理其他任务,以其他形式,我需要显示该特定用户所有导出活动的进度。根据任意网页的要求写入用户文件空间的Web浏览器是一个安全问题(IE4等)。一种解决方法是浏览器扩展。另一种是让用户运行您编写的程序,而不是web浏览器。另一种是服务器将文件写入用户可以访问的网络位置。@DonMax Old post,但只需将流保存到磁盘,如下所述: