请求失败,HTTP状态为401:未授权IN SSRS

时间:2013-10-08 12:25:54

标签: c# sql-server asp.net-mvc-3 reporting-services ssrs-2008

我的应用程序位于Asp.Net MVC3 C#编码,我在SQL Server Business Intelligence Developement Studio的{​​{1}}中有一个SSRS解决方案,我通过调用SSRS报告Asp.Net MVC3 应用程序。几天前我的应用程序运行正常,但突然我收到如下错误:

我的错误:

Visual Studio 2008

我的尝试

  1. 我的SSRS报告已部署在The request failed with HTTP status 401: Unauthorized. 上。我在SSRS报告解决方案的数据源中正确设置了我的凭证。

  2. 我尝试在我的web.config中添加标记local server

  3. 我尝试添加<identity impersonate="true" userName="Domain\username" password="Password" />

  4. 我将Visual Studio作为IReportServerCredentials reportCredentials = new ReportServerCredentials("MyUserName", "MyPassword", "ServerName");运行。

  5. 我尝试了此链接Creating a key using RegEdit

  6. 中提到的解决方案
  7. 更新 我也尝试了以下解决方案,但结果相同:Unauthorized error in SSRS

  8. 上述解决方案均无效,但当我在其他机器上运行相同的解决方案时,解决方案运行良好且不会显示错误。它只有当我从我的机器运行解决方案然后我得到错误'Run as Administrator'

7 个答案:

答案 0 :(得分:3)

我也遇到了同样的错误,

The request failed with HTTP status 401: Unauthorized.

让我分享一下我的尝试,现在工作正常。

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

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

这对我有用!

答案 1 :(得分:2)

试试这个

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 :(得分:1)

我遇到的问题是我的ReportPath。我使用的是在浏览器中呈现的URL,但应该使用ReportServer数据库中的URL。要获取路径,请查询目录表并使用路径字段中的值。

答案 3 :(得分:0)

请求失败,http状态401未经授权。 ssrs 2008

来自web.config add key =&#34; RS_UName&#34;值=&#34;拉吉夫-PC&#34; ----不正确

将上述值替换为您的系统名称(rajiv)而不是像rajiv-pc这样的sql server名称

总是有系统名称而不是sql server name。

来自web.config add key =&#34; RS_UName&#34;值=&#34;拉吉夫&#34; ---正确

答案 4 :(得分:0)

好奇的回答解决了我的问题。谢谢你!

另外,请检查您的web.config。必须具备以下条件:

`

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

`

公共令牌必须相同,否则会引发另一个错误。

答案 5 :(得分:0)

我遇到了同样的问题。一切正常,然后突然我在reportviewer iframe中收到401而不是我在调试模式下的报告(localhost)。我一直在摆弄设置,让它在现场运行,所以我觉得我做错了......

尝试了几件事,然后决定重新启动并猜测是什么?我的域密码已过期,因此身份验证失败! 愚蠢的愚蠢我!

以为我会在这里添加我的解决方案以防人们遇到同样的愚蠢情况并且花费宝贵的时间来弄清楚他们做错了什么......

答案 6 :(得分:0)

请仅检查您指向的Web服务网址。我在两台单独的服务器上部署了SSRS,其中一台运行良好,而另一台则抛出此错误“请求失败,HTTP状态为401未经授权。”

所以几个小时后,我看到我没有指向web.config上的Web服务URL。在web.config上的示例更改报告服务URL:http://weburl/ReportServer

这工作!!!