2015-05-07 3 views
4

Я прочитал несколько статей по этой проблеме, однако все они закончили тем, что они не работают или находятся на vb.net.Сохранить отчет SSRS как PDF в C# программно

То, что я в настоящее время:

Отчеты доступны через URL, который делает их как PDF и сохраняет их в папке загрузки, когда пользователь нажимает на кнопку, они приведены общие имена, такие как OrderReport, OrderReport (1) ... и так далее.

var orderNum = 1; 

"http://Server/ReportServer_Name/Pages/ReportViewer.aspx?%2fOrderReport&rs:Command=Render&OrderID=" + orderNum + "&rs:ClearSession=true&rs:Format=PDF" 

Я пытаюсь для того чтобы достигнуть:

  • Я хотел бы использовать C# для извлечения этого отчета, если это возможно, а затем указать имя файла PDF и сохранить его в правильном место нахождения.

так, например, я хотел бы сохранить этот отчет во временной папке на текущий момент «C: \ TEMP» с именем OrderID-1. Я использую C#

я добавил в ServiceReference в проект я использую под названием ReportTestings поэтому ссылка

using ReportTestings; 

и Web Reference URL:

http://Server/ReportServer_Name/ReportExecution2005.asmx

(удален фактические имена по соображениям безопасности)

, поэтому, основываясь на всей этой информации выше, кто-то может указать мне правильное направление или привести пример часть кода, Thankyou для всех, которые читают этот пост или помочь

с помощью этого кода я получаю эту ошибку: (+ е

{"Access to the path 'C:\\Program Files (x86)\\IIS Express\\report1one.pdf' is denied."} System.Exception {System.UnauthorizedAccessException}) 

код:

ReportExecutionService rs = new ReportExecutionService(); 
    rs.Credentials = new NetworkCredential("username", "password", "domain"); 
    rs.Url = "http://Server/ReportServer_Name/reportexecution2005.asmx"; 

    // Render arguments 
    byte[] result = null; 
    string reportPath = "/Invoice"; 
    string format = "PDF"; 
    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 = "InvoiceID"; 
    parameters[0].Value = "2"; 

    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("report1one.pdf", 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); 
    } 

ответ

4

Используемый URL-адрес веб-службы (ReportService2012) предназначен для управления объектами сервера отчетов.

Если вам нужно отображать отчеты, вы должны использовать веб-сервис ReportExecution2005.

Для начала ознакомьтесь с методом Render.


Чтобы указать учетные данные можно добавить на следующие строки (я то же имя переменной используется в вашей ссылке: RS2005):

RS2005.Credentials = new System.Net.NetworkCredential("username", "password", "domain"); 

EDIT:

отказано Ваш доступ ошибка возникает, когда приложение пытается сохранить файл с вашим веб-приложением, поэтому вы должны использовать абсолютный путь или разрешить его с помощью Server.MapPath

+0

ive пытались это, но я продолжаю получать доступ, отказавшись при попытке сохранить отчет где-нибудь. Посмотрите на приведенный выше пример, пожалуйста, добавьте сейчас, если бы вы могли пройти мимо отказа в доступе, который помог бы ужасной лоте – Crezzer7

+0

Пример в ссылка, предоставленная мной (https://msdn.microsoft.com/en-us/library/reportexecution2005.reportexecutionservice.render.aspx) довольно проста, посмотрели ли вы на нее? –

+0

да, по-прежнему та же проблема с доступом denied – Crezzer7

Смежные вопросы