sql-server 请求失败,HTTP状态为401:未经授权的IN SSRS

z9smfwbn  于 2022-10-31  发布在  其他
关注(0)|答案(8)|浏览(232)

我的应用程序在Asp.Net MVC3中,编码为C#,我在Visual Studio 2008中有一个SSRS解决方案,我正在通过我的ASP.NET MVC3应用程序调用SSRS报告。我的应用程序几天前运行良好,但突然出现如下错误:

我的错误:

The request failed with HTTP status 401: Unauthorized.

我的尝试

1.我的SSRS报告部署在我的local server上。我在SSRS报告解决方案的数据源中正确设置了凭据。
1.我试图在我的web.config <identity impersonate="true" userName="Domain\username" password="Password" />中添加标记
1.我尝试添加IReportServerCredentials reportCredentials = new ReportServerCredentials("MyUserName", "MyPassword", "ServerName");
1.我以'Run as Administrator'的形式运行Visual Studio。
1.我尝试了此链接中提到的解决方案Creating a key using RegEdit
1.更新我也尝试了以下解决方案,但结果相同:Unauthorized error in SSRS
上面的解决方案都不起作用,但是当我在其他机器上运行同样的解决方案时,这些解决方案运行得很好,没有显示错误。只有当我从我的机器上运行解决方案时,我才得到错误The request failed with HTTP status 401: Unauthorized.

iih3973s

iih3973s1#

我也得到了同样的错误,

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

"这对我很管用"

xeufq47z

xeufq47z2#

我遇到了同样的问题。一切都很好,然后突然我在reportviewer iframe中收到了一个401,而不是我在调试模式(localhost)下的报告。我一直在摆弄设置,让它在现场运行,所以我认为我做错了什么。
尝试了几件事,然后决定只是重新启动,你猜怎么着???我的域密码已经过期,所以身份验证失败!!!愚蠢愚蠢愚蠢的我!
我想我应该在这里添加我的解决方案,以防人们遇到同样愚蠢的情况,浪费宝贵的时间去找出他们做错了什么...

3b6akqbq

3b6akqbq3#

试试这个

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

        }
gblwokeq

gblwokeq4#

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

pw9qyyiw

pw9qyyiw5#

请求失败,http状态为401未授权。ssrs 2008
从web.config添加键=“RS_UName”值=“rajiv-pc”----不正确
用您的系统名称(rajiv)替换上面的值,而不是sql服务器名称,如rajiv-pc
始终存在系统名称而不是sql服务器名称。
从web.config添加键=“RS_UName”值=“rajiv”---正确

njthzxwz

njthzxwz6#

好奇的家伙的回答解决了我的问题。谢谢伙计!
此外,请检查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>

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

iqxoj9l9

iqxoj9l97#

请检查您指向的Web服务URL。我在两个独立的服务器上部署了SSRS,其中一个服务器工作正常,而另一个服务器则抛出了此错误“请求失败,http状态401未经授权”。
因此,几个小时后,我发现我没有指向web. config上的Web服务URL。示例在web. config上更改报表服务URL:http://weburl/ReportServer
这很有效!!!

a11xaf1n

a11xaf1n8#

我们最近搬到了一个新的服务器上。我们用来访问winform应用程序中的报告的SSRS ID已经过期,需要更改密码。
这就解决了问题。
我们还使密码不过期....:-(

相关问题