使用ReportService2010.asmx以编程方式导出来自Sharepoint的SSRS报告
我必须以编程方式导出ssrs报告为Excel,添加服务参考
HTTP:/siteurl/_vti_bin/ReportServer/ReportService2010.asmx
HTTP:/siteurl/_vti_bin/ReportServer/ReportExecution2005.asmx
有人可以提供一个工作的博客
我现在用VS 2012 .NET 4.5为我的工作做了这个工作,用于报告PDF报告的自动化。
答:为了便于使用编译自己的代理类比每次引用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.一旦你创build你的代理类把它放在一个库项目重用恕我直言。 如果你有多个环境,build立一些封装类来完成写作和configuration文件中的一些服务器,你可能想引用它们。
C.编写一些引用库的代码,并用C#构build第一次报告。
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.(可选):您可能需要处理刷新SSRS主机服务器上的WebService。 默认情况下,它每12小时回收一次,因此在第一次报告之后呈现缓慢。 您可以使用http://(servername)/ ReportServer上的服务端点每10小时进行一次networking调用来刷新这些服务。 我使用了一个名为Visual Cron的工具,可以设置自动化任务,也可以尝试更改SSRS服务configuration,创build自己的保活服务等。基本上,您只需要更改设置或者与之保持通话它打开。