Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The request failed with HTTP status 401: Unauthorized IN SSRS

My Application is in Asp.Net MVC3 coded in C#, i have a SSRS solution in SQL Server Business Intelligence Developement Studio in Visual Studio 2008 , I'm calling the SSRS report through my Asp.Net MVC3 application. My application was running fine a couple of days back but suddenly i'm getting an error as follows:

My Error :

The request failed with HTTP status 401: Unauthorized.

My Attempts

  1. My SSRS reports are deployed on my local server. I have my credential properly set in the datasource of my SSRS report solution.

  2. I tried to add the tag in my web.config <identity impersonate="true" userName="Domain\username" password="Password" />

  3. I tried adding IReportServerCredentials reportCredentials = new ReportServerCredentials("MyUserName", "MyPassword", "ServerName");

  4. I ran the Visual Studio as 'Run as Administrator'.

  5. I tried the solution mentioned in this link Creating a key using RegEdit

  6. Update I tried the following solution as well but the same result : Unauthorized error in SSRS

None of the above solutions worked, but when i run the same solution on some other machine than the solutions works well and no error is displayed. Its only when i run the solution from my machine then i get the error The request failed with HTTP status 401: Unauthorized.

like image 251
Sam M Avatar asked Oct 08 '13 12:10

Sam M


2 Answers

I am also getting the same error,

The request failed with HTTP status 401: Unauthorized.

Let me share what I tried and it is working fine now.

public class CustomSSRSCredentials : IReportServerCredentials
    {
        private string _SSRSUserName;
        private string _SSRSPassWord;
        private string _DomainName;

        public CustomSSRSCredentials(string UserName, string PassWord, string DomainName)
        {
            _SSRSUserName = UserName;
            _SSRSPassWord = PassWord;
            _DomainName = DomainName;
        }

        public System.Security.Principal.WindowsIdentity ImpersonationUser
        {
            get { return null; }
        }

        public ICredentials NetworkCredentials
        {
            get { return new NetworkCredential(_SSRSUserName, _SSRSPassWord, _DomainName); }
        }

        public bool GetFormsCredentials(out Cookie authCookie, out string user,
         out string password, out string authority)
        {
            authCookie = null;
            user = password = authority = null;
            return false;
        }
    }

Inside page_load event,

if (!Page.IsPostBack)
{
    ReportViewer1.ProcessingMode = ProcessingMode.Remote;
    IReportServerCredentials ssrscredentials = new CustomSSRSCredentials("MyUserName", "MyPassword", "ServerName");
    ServerReport serverReport = ReportViewer1.ServerReport;
    ReportViewer1.ServerReport.ReportServerCredentials = ssrscredentials;
    serverReport.ReportServerUrl = new Uri("ReportPathKey");
    serverReport.ReportPath = "/Reports/MyReport";
    serverReport.Refresh();
}

This worked for me!

like image 101
pedram Avatar answered Sep 19 '22 15:09

pedram


The problem I had was my ReportPath. I was using the URL rendered one in the browser but instead should have been using the one from the ReportServer database. To get the path, query the Catalog table and use the value from the path field.

like image 23
Greg Sipes Avatar answered Sep 16 '22 15:09

Greg Sipes