8

我必须以编程方式将 ssrs 报告导出到 excel,添加服务参考

http://siteurl/_vti_bin/ReportServer/ReportService2010.asmx

http://siteurl/_vti_bin/ReportServer/ReportExecution2005.asmx

有人可以提供一个工作博客吗

4

1 回答 1

11

我这样做是为了我目前使用 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.(可选):您可能想要处理刷新 SSRS 托管服务器上的 WebService。默认情况下,它每 12 小时循环一次,从而使第一个报告在此之后呈现缓慢。您只需每 10 小时左右对位于 http:// (servername)/ReportServer 的服务端点进行一次网络调用,即可刷新这些服务。我使用了一个名为 Visual Cron 的工具,它可以设置自动化任务,你也可以尝试更改 SSRS 服务配置,创建自己的保持活动服务等。基本上你只需要更改设置或与它交谈即可保持它打开。

于 2013-01-24T01:01:21.283 回答