Salvare il Report SSRS come PDF in C# a livello di programmazione

Ho letto con più articoli riguardo a questo problema, tuttavia, hanno finito per che non funziona, o sono in vb.net.

Quello che ho attualmente sono:

I rapporti sono accessibili tramite un URL che li rende un PDF e li salva nella cartella download quando l’utente fa clic su un pulsante, questi sono dati nomi generici come OrderReport, OrderReport(1)… e così via.

var orderNum = 1;

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

Quello che sto cercando di ottenere:

  • Vorrei usare C# per recuperare questo rapporto, se possibile, e quindi specificare un nome per il file PDF e salvarlo nella posizione corretta.

così, per esempio, vorrei salvare il report in una cartella temporanea per ora “C:\temp” con il nome Idordine-1. Sto usando C#

Ho aggiunto un Riferimentoservizio nel Progetto sto usando chiamato ReportTestings in modo che il riferimento è

using ReportTestings;

Web e l’URL di Riferimento:

http://Server/ReportServer_Name/ReportExecution2005.asmx

(rimosso i nomi per motivi di sicurezza)

quindi, in base a tutte le informazioni di cui sopra potrebbe qualcuno mi punto nella giusta direzione o di dare un esempio di codice, Grazie per tutto quello che leggi questo post o aiuto

utilizzando questo codice ottengo questo errore :(+ e

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

codice:

    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);
    }

OriginaleL’autore Crezzer7 | 2015-05-07

1 risposta

  1. 5

    Webservice URL che si sta usando (ReportService2012) per la gestione del server di report oggetti.

    Se avete bisogno di eseguire il rendering del report, si dovrebbe essere utilizzando il ReportExecution2005 webservice.

    Per iniziare, si dovrebbe dare un’occhiata al Rendering metodo.


    Per specificare le credenziali è possibile aggiungere la seguente riga (ho lo stesso nome di variabile utilizzata nel tuo link: RS2005):

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

    EDIT:

    Accesso negato errore si verifica quando l’applicazione tenta di salvare il file con un’applicazione web, quindi è necessario utilizzare un percorso assoluto o risolvere utilizzando Server.MapPath

    ive stato cercando questo, ma non ho sempre accesso negato durante il tentativo di salvare il report ovunque.. guardare l’esempio di cui sopra ill aggiungere ora, se si potrebbe ottenere passato l’errore di accesso negato che avrebbe aiutato un sacco
    L’esempio del link che ho fornito (msdn.microsoft.com/en-us/library/…) è piuttosto semplice, hai visto?
    sì, ancora lo stesso problema con l’accesso negato
    Ok, quindi, per favore modifica il tuo post e aggiungere i dettagli dell’errore
    aggiunto il codice, sto lavorando con e aggiunto, in parte sono stati inclusi per quanto riguarda le Credenziali ma, purtroppo, ancora lo stesso messaggio di errore

    OriginaleL’autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *