Passing Credentials to Sql Report Server 2008

52,216

I really haven't messed with SSRS - but my ASP.NET hat tells me you may want to wrap that stuff in an if (!IsPostBack) block to keep it from running on the page refresh. My guess is that ReportViewer1.ServerReport.Refresh() pulls the default values again.

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack) 
    {
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
        ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
        ReportViewer1.ServerReport.Refresh();
    }
}
Share:
52,216
adopilot
Author by

adopilot

Hello ! I am coming from Bosnia and Herzegovina,Sarajevo capital, I work in family firm as an IT administrator, My primary task is to eventing works well and lot of other stuff such as buying software, buying equipment, administrating SQL servers and much more. Our Company business is retrial and We have shops all around country with more than 300 working station with more than 1000 employed. In free time I try to learn programing in .NET and I having fun driving motocross bike, some time by summer I do a solar gliding flaying as sport pilot. If You fund my English is bad do not be maid my education was mostly during the war in Bosnia, in that time we did not have to study much for good ratings. Best regards Admir

Updated on July 09, 2022

Comments

  • adopilot
    adopilot almost 2 years

    I am pretty new in C# and my English is not so good - sorry in advance if I miss a point.

    I tried to build an ASP.NET web site with a ReportService control. As you might already know, SSRS 2008 does not allow anonymous login. So, I tried to pass Credentials to SSRS which will be stored inside my web page so that users will be able to see the report without logging in.

    I found the code below and put it on my WebForm, but I'm having a problem with the report parameters.

    • If there are default values for the report parameters, the below code works okay.

    • But, if I try to change the value of a parameter, the whole page is
      refreshed and before I click the "View Report" button, all
      parameters are reset to default or null values.

    Any suggestion on how to avoid refreshing the whole page, or another way to pass the login info to SSRS? Thanks a lot in advance.

    using System;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Net;
    using Microsoft.Reporting.WebForms;
    
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ReportViewer1.Width = 800;
            ReportViewer1.Height = 600;
            ReportViewer1.ProcessingMode = ProcessingMode.Remote;
            IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
            ReportViewer1.ServerReport.ReportServerCredentials = irsc;
            ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
            ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
            ReportViewer1.ServerReport.Refresh();
        }
    }
    
    public class CustomReportCredentials : IReportServerCredentials
    {
         private string _UserName;
         private string _PassWord;
         private string _DomainName;
    
         public CustomReportCredentials(string UserName, string PassWord, string DomainName)
         {
            _UserName = UserName;
            _PassWord = PassWord;
            _DomainName = DomainName;
         }
    
         public System.Security.Principal.WindowsIdentity ImpersonationUser
         { 
            get { return null; } 
         } 
    
         public ICredentials NetworkCredentials
         {
            get { return new NetworkCredential(_UserName, _PassWord, _DomainName); }
         }
    
         public bool GetFormsCredentials(out Cookie authCookie, out string user,
          out string password, out string authority)
         {
            authCookie = null;
            user = password = authority = null;
            return false;
         }
    }
    
  • adopilot
    adopilot about 15 years
    I try to cut out line ReportViewer1.ServerReport.Refresh() but unfortunately same thing happened again.
  • Mark Brackett
    Mark Brackett about 15 years
    Did you wrap it in a IsPostBack check?
  • dcarneiro
    dcarneiro about 13 years
    ReportViewer1.ServerReport.ReportServerCredentials has no setter
  • Philippe
    Philippe over 12 years
    Thanks for this tidbit. I've been puzzled for several hours as to why the report would not render when I passed in credentials. This is genius!