Reporting Services als PDF über WebRequest in C# 3.5 "Nicht Unterstützter Dateityp"

Habe ich geerbt, eine legacy-Anwendung soll das grab ein on-the-fly pdf-Datei von einem reporting services-server. Funktioniert alles einwandfrei bis zu dem Punkt, wo Sie versuchen, öffnen Sie die pdf-Datei zurückgegeben wird, und adobe acrobat sagt Sie:

Adobe Reader konnte nicht öffnen
'thisStoopidReport'.pdf', weil es ist
entweder ist keine unterstützte Dateityp oder
weil die Datei beschädigt wurde(für
war es zum Beispiel als email versenden
Anlage und war nicht korrekt
decodiert).

Ich habe einige anfängliche Fehlersuche in dieser. Wenn ich ersetzen Sie die url in die WebRequest.Create () - Aufruf mit einer gültigen pdf-Datei auf meinem lokalen Rechner ie: @"C:temp/validpdf.pdf") dann bekomme ich eine gültige PDF-Datei.

Den Bericht selbst scheint gut zu funktionieren. Wenn ich manuell geben Sie die URL für die reporting services-Bericht, der erzeugt werden sollte, die pdf-Datei werde ich aufgefordert, für die Authentifizierung der Benutzer. Aber nach der Lieferung es ich um eine gültige pdf-Datei.

Habe ich ersetzen Sie den tatsächlichen url,username,userpass und domain, die Zeichenfolgen in den folgenden code mit Schein-Werte aus offensichtlichen Gründen.

        WebRequest request = WebRequest.Create(@"http://x.x.x.x/reportServer?/reports/reportNam&rs:format=pdf&rs:command=render&rc:parameters=blahblahblah");
        int totalSize = 0;
        request.Credentials = new NetworkCredential("validUser", "validPass", "validDomain");
        request.Timeout = 360000; //6 minutes in milliseconds.
        request.Method = WebRequestMethods.Http.Post;
        request.ContentLength = 0;
        WebResponse response = request.GetResponse();
        Response.Clear();
        BinaryReader reader = new BinaryReader(response.GetResponseStream());
        Byte[] buffer = new byte[2048];
        int count = reader.Read(buffer, 0, 2048);
        while (count > 0)
        {
            totalSize += count;
            Response.OutputStream.Write(buffer, 0, count);
            count = reader.Read(buffer, 0, 2048);
        }
        Response.ContentType = "application/pdf";
        Response.Cache.SetCacheability(HttpCacheability.Private);
        Response.CacheControl = "private";
        Response.Expires = 30;
        Response.AddHeader("Content-Disposition", "attachment; filename=thisStoopidReport.pdf");
        Response.AddHeader("Content-Length", totalSize.ToString());
        reader.Close();
        Response.Flush();
        Response.End();
InformationsquelleAutor | 2008-12-10
Schreibe einen Kommentar