C# :: SQL ReportServer in asp.NET
Voraussetzung für die Umsetzung dieses Beitrags ist ein funktionierender Report auf Basis des SQL Reporting Services. Hierbei ist es unerheblich mit welcher SQL Server Version (2005[8.0] oder 2008[9.0]) gearbeitet wird. Die asp.NET-Umsetzung habe ich im Framework 2.0 umgesetzt.
Zunächst brauchen wir eine (in meinem Fall serialisierbare) Klasse, die das Interface Microsoft.Reporting.Webforms.IReportsServerCrendentials zur Ausführung des Reports implementiert:
[Serializable]
public class ReportCredentials :
Microsoft.Reporting.WebForms.IReportServerCredentials
{
string _userName, _password, _domain;public ReportCredentials(string userName, string password,
string domain)
{
_userName = userName;
_password = password;
_domain = domain;
}public System.Security.Principal.WindowsIdentity ImpersonationUser
{
get
{
return null;
}
}public System.Net.ICredentials NetworkCredentials
{
get
{
return new System.Net.NetworkCredential
(_userName, _password, _domain);
}
}public bool GetFormsCredentials(out System.Net.Cookie authCookie,
out string userName, out string password,
out string authority)
{
userName = _userName;
password = _password;
authority = _domain;
authCookie = new System.Net.Cookie
(“.ASPXAUTH”, “.ASPXAUTH”, “/”, “Domain”);
return true;
}
}
Auf der aspx-Page, auf der der Report eingebunden werden soll, muss ein Steuerelement “ReportViewer” und folgender Code eingefügt werden:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ReportViewer1.ShowCredentialPrompts = false;
ReportViewer1.ServerReport.ReportServerCredentials =
new ReportCredentials(“UserName”, “Passwort”, “”);
ReportViewer1.ProcessingMode =
Microsoft.Reporting.WebForms.ProcessingMode.Remote;
ReportViewer1.ServerReport.ReportServerUrl =
new System.Uri(“http://reportserver/ReportServer”);
ReportViewer1.ServerReport.ReportPath =
“/Path2Report/ReportName”;ReportViewer1.ServerReport.Refresh();
}
}
Auch eine Parametrisierung aus der Webpage ist möglich:
ReportParameter[] param = new ReportParameter[1];
param[0] = new ReportParameter(“ReportParam”, txtParameter.Text);ReportViewer1.ServerReport.SetParameters(param);
Und zu guter letzt muss noch ein Abschnitt in der web.config im Abschnitt <system.web><httpHandlers> angelegt werden:
<add verb=”*” path=”Reserved.ReportViewerWebControl.axd” type = “Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” />
mherbert