使用 ReportService2010.asmx 以编程方式从共享点导出 s-s-rS 报告
Posted
技术标签:
【中文标题】使用 ReportService2010.asmx 以编程方式从共享点导出 s-s-rS 报告【英文标题】:Programmatically Export s-s-rS report from sharepoint using ReportService2010.asmx 【发布时间】:2013-01-23 11:56:23 【问题描述】:我必须以编程方式将 s-s-rs 报告导出到 excel,添加服务参考
http:/siteurl/_vti_bin/ReportServer/ReportService2010.asmx
http:/siteurl/_vti_bin/ReportServer/ReportExecution2005.asmx
谁能提供一个工作博客
【问题讨论】:
【参考方案1】:我这样做是为了我目前使用 VS 2012 .NET 4.5 来实现 PDF 报告的报告自动化。
A.为了便于使用,编译您自己的代理类比每次都引用 Web 服务更容易,因为您可能会忘记服务名称。
来自 Visual Studio 命令提示符:
wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2010" http://<Server Name>/reportserver/reportservice2010.asmx?wsdl
参考:http://msdn.microsoft.com/en-us/library/ms155134(v=sql.105).aspx (仅当您想获取信息并执行时才需要服务:ReportExecution2005 和 ReportService2010。如果您只想渲染,则只需要 ReportExecution2005)
B.创建代理类后,将其放入库项目中以供重用恕我直言。如果您有多个环境,您可能需要在配置文件中构建一些包装类来进行写入和一些服务器。
C.编写一些引用该库的代码并在 C# 中构建第一次报告:
using System;
using System.IO;
using System.Web.Services.Protocols;
using myNamespace.MyReferenceName; // YOUR PROXY PROJECT
class Sample
static void Main(string[] args)
ReportExecutionService rs = new ReportExecutionService();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://myserver/reportserver/ReportExecution2005.asmx";
// Render arguments
byte[] result = null;
string reportPath = "/AdventureWorks Sample Reports/Employee Sales Summary";
string format = "Mhtml";
string historyID = null;
string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";
// Prepare report parameter.
ParameterValue[] parameters = new ParameterValue[3];
parameters[0] = new ParameterValue();
parameters[0].Name = "EmpID";
parameters[0].Value = "288";
parameters[1] = new ParameterValue();
parameters[1].Name = "ReportMonth";
parameters[1].Value = "6"; // June
parameters[2] = new ParameterValue();
parameters[2].Name = "ReportYear";
parameters[2].Value = "2004";
DataSourceCredentials[] credentials = null;
string showHideToggle = null;
string encoding;
string mimeType;
string extension;
Warning[] warnings = null;
ParameterValue[] reportHistoryParameters = null;
string[] streamIDs = null;
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rs.ExecutionHeaderValue = execHeader;
execInfo = rs.LoadReport(reportPath, historyID);
rs.SetExecutionParameters(parameters, "en-us");
String SessionId = rs.ExecutionHeaderValue.ExecutionID;
Console.WriteLine("SessionID: 0", rs.ExecutionHeaderValue.ExecutionID);
try
result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
execInfo = rs.GetExecutionInfo();
Console.WriteLine("Execution date and time: 0", execInfo.ExecutionDateTime);
catch (SoapException e)
Console.WriteLine(e.Detail.OuterXml);
// Write the contents of the report to an MHTML file.
try
FileStream stream = File.Create("report.mht", result.Length);
Console.WriteLine("File created.");
stream.Write(result, 0, result.Length);
Console.WriteLine("Result written to the file.");
stream.Close();
catch (Exception e)
Console.WriteLine(e.Message);
取自这里:http://msdn.microsoft.com/en-us/library/reportexecution2005.reportexecutionservice.render(v=sql.105).aspx
D. (可选):您可能想要处理刷新 s-s-rS 托管服务器上的 WebService。默认情况下,它每 12 小时循环一次,从而使第一个报告在此之后呈现缓慢。您只需每隔 10 小时左右对位于 http:// (servername)/ReportServer 的服务端点进行一次网络调用即可刷新这些服务。我使用了一个名为 Visual Cron 的工具,它可以设置自动化任务,你也可以尝试更改 s-s-rS 服务配置,创建自己的保持活动服务等。基本上你只需要更改设置或与它交谈即可保持它打开了。
【讨论】:
如何在 C# 中以编程方式使用 Datasources 或 Query ?还是仅在 RDL 文件中? 这与上述问题完全没有关系。但我相信我回答的问题类似于您在这里提出的问题:***.com/questions/16817911/get-data-from-s-s-rs-dataset/…以上是关于使用 ReportService2010.asmx 以编程方式从共享点导出 s-s-rS 报告的主要内容,如果未能解决你的问题,请参考以下文章