Web- und Software Development

Der ReportingService (SSRS) unter C#

Written By: - Mai• 18•10

Das eine oder andere HowTo um den SQL Server ReportingService anzusprechen funktionierten bei mir immer nur zur Hälfte. Wem es genau so geht, hier eine kleine Anleitung, wie man den ReportingService unter VS2008 via WSDL konsumiert.

Zieldefinition: Über eine C# Applikation wird es ermöglich, ein  Bericht über die SQL Server Reporting WSDL Schnittstelle  als PDF zu rendern und zu speichern. Der Bericht muss dazu auf dem ReportServer vorhanden sein. Möchte man einen Bericht erstellen, kann er z.B.  den ReportBuilder 3.0 dazu verwenden.

Okay lets go.

Man fügt dem Projekt zu Beginn einen Dienstverweis hinzu, folgende URL (Server anpassen : ) zum ReportService  wird dazu verwendet.

1
http://<SERVER>/reportserver/reportservice2005.asmx?wsdl

Der Securityknoten in der automatisch angelegten app.conf wird durch folgende Einträge angepasst

1
2
3
4
5
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="Windows"
        realm="">
    </transport>
</security>

Die Using Direktive für den Client findet man in der eben angelegten ServiceReference, in meinem Fall lautet diese

1
using SQLReportingServiceTest.ReportingService;

Für die Render Methode benötigen wir unter anderen noch einige Variablen und den entsprechenden Clientaufruf.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//Das Format, in dem der Bericht gerendert werden soll. Dieses Argument ist einer Renderingerweiterung zugeordnet. Zu den unterstützten Formaten gehören Microsoft Office Excel, PDF und Image.
string format = "PDF";
//[out] Die beim Rendern des Berichtsinhalts verwendete Codierung.
string encoding;
 //[out] Der MIME-Typ des gerenderten Berichts.
string mimeType;
 //[out] Die für die Ausgabedatei verwendete Dateinamenerweiterung.
string extension;
// [out] Ein Array von Warning-Objekten zur Beschreibung der Warnungen, die während der Berichtsverarbeitung ausgegeben wurden.
Microsoft.Reporting.WinForms.Warning[] warnings = null; string[] streamIDs = null;
 
using (var rs = new ReportingService2005SoapClient())
{
    //Festlegen der zulässigen Identitätswechselebene (Server/Client)
    rs.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
 
    //Instanz des ReportViewer-Steuerelements
    var rv = new ReportViewer();
 
    //Festlegen des Verarbeitungsmodus des ReportViewer-Steuerelements.
    rv.ProcessingMode = ProcessingMode.Remote;
 
    //Berichtsserver festlegen
    rv.ServerReport.ReportServerUrl = new Uri(@"http://<SERVER>/reportserver");
 
    //Festlegen des Pfades zum Bericht
    rv.ServerReport.ReportPath = @"/MeinBericht";
 
   //Verarbeitet den Bericht und rendert ihn im angegebenen Format und speichert diesen in ein byteArray
    byte[] bytes = rv.ServerReport.Render(format, null, out mimeType, out encoding, out extension, out streamIDs, out warnings);
 
    //Schreibt das Resultat in ein pdf
    FileStream fs = File.Create("result.pdf", bytes.Length);
    fs.Write(bytes,0,bytes.Length);
    fs.Close();
}

Nach Ausführen dieses Codes, steht im bin Ordner nun eine result.pdf zur Verfügung.


Weiterführende Links:


Viel Spass beim entwickeln : )

Ähnliche Beiträge

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

One Comment

  1. Mario sagt:

    Achja, es muss auf Microsoft.ReportViewer.WinForms und System.Windows.Forms referenziert werden.