web-dev-qa-db-fra.com

La requête a échoué avec le statut HTTP 401: Unauthorized IN SSRS

Mon application est en Asp.Net MVC3 codée en C#, j'ai une solution SSRS en SQL Server Business Intelligence Developement Studio en Visual Studio 2008, j'appelle le rapport SSRS via mon Asp.Net MVC3 application. Mon application fonctionnait bien il y a quelques jours, mais tout à coup, une erreur se produit comme suit:

Mon erreur:

The request failed with HTTP status 401: Unauthorized.

Mes tentatives

  1. Mes rapports SSRS sont déployés sur mon local server. J'ai mes informations d'identification correctement définies dans la source de données de ma solution de rapport SSRS.

  2. J'ai essayé d'ajouter le tag dans mon web.config <identity impersonate="true" userName="Domain\username" password="Password" />

  3. J'ai essayé d'ajouter IReportServerCredentials reportCredentials = new ReportServerCredentials("MyUserName", "MyPassword", "ServerName"); 

  4. J'ai couru le Visual Studio en tant que 'Run as Administrator'.

  5. J'ai essayé la solution mentionnée dans ce lien Création d'une clé avec RegEdit

  6. Update J'ai aussi essayé la solution suivante, mais le même résultat: Erreur non autorisée dans SSRS

Aucune des solutions ci-dessus n'a fonctionné, mais lorsque je lance la même solution sur une autre machine, les solutions fonctionnent bien et aucune erreur ne s'affiche. Ce n'est que lorsque j'exécute la solution à partir de ma machine, puis je reçois l'erreur The request failed with HTTP status 401: Unauthorized.

8
Sam M

Je reçois aussi la même erreur, 

The request failed with HTTP status 401: Unauthorized.

Permettez-moi de partager ce que j'ai essayé et cela fonctionne bien maintenant.

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;
        }
    }

Dans l'événement page_load,

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();
}

Cela a fonctionné pour moi!

3
pedram

Essaye ça

public void GetConnectionOfReportServer()
        {
            try
            {
                NetworkCredential credential = new NetworkCredential("administrator", "password@123", "Domain");
                this.reportViewer1.ServerReport.ReportServerCredentials.NetworkCredentials = credential;

                //select where the report should be generated with the report viewer control or on the report server using the SSRS service.
                this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
                this.reportViewer1.ServerReport.ReportServerUrl = new Uri(@"http://localhost/ReportServer");
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


        }
2
vikky

la demande a échoué avec le statut HTTP 401 non autorisé. ssrs 2008

depuis web.config add key = "RS_UName" value = "rajiv-pc" ---- incorrect

remplacez la valeur ci-dessus par votre nom de système (rajiv) et non par le nom du serveur SQL tel que rajiv-pc

il y a toujours un nom de système et non un nom de serveur SQL.

depuis web.config add key = "RS_UName" value = "rajiv" --- correct

0
user2959497

la réponse de Curiousguy a résolu mon problème. Merci mec!

Aussi, vérifiez votre web.config. Il doit avoir ce qui suit:

`

<system.web>
<httpHandlers>
      <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
        validate="false" />
    </httpHandlers>
</system.web>
<system.webServer>
<handlers>
      <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd"
       type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, 
          PublicKeyToken=89845dcd8080cc91" />
</handlers>
  </system.webServer>

`

Le jeton public doit être identique, sinon une autre erreur sera supprimée. 

0
Hadrian

J'ai eu le même problème. Tout a bien fonctionné, puis j'ai reçu soudainement un 401 dans l'iframe reportviewer au lieu de mon rapport en mode débogage (localhost). J'avais bricolé avec les réglages pour le faire fonctionner sur le site live, alors je pensais avoir fait quelque chose de mal ...

Essayé plusieurs choses et ensuite décidé de simplement redémarrer et devinez quoi ??? Mon mot de passe de domaine a expiré, donc l'authentification a échoué !!! Stupid stupide stupide moi!

Je pensais ajouter ma solution ici au cas où les gens se retrouveraient dans la même situation stupide et perdraient un temps précieux à comprendre ce qu'ils ont mal fait ...

0
Caty Hespel