SSRS报告查看器:请求失败,HTTP状态为401

时间:2013-01-29 16:26:55

标签: asp.net .net reporting-services ssrs-2008 reportviewer

我花了很多时间试图解决这个问题,但没有运气 - 所以我会尝试在这里发布问题。

我在同一台服务器上运行2个ASP.NET网站。这两个网站都在IIS 7.5 + .NET 4上运行。这些站点使用SSRS报告查看器显示来自另一台服务器的报告。

我们最近将网站和RS移动到新服务器(从RS 2005切换到RS 2008并从IIS 7.0切换到IIS 7.5)。但是,移动到新服务器后,其中一个网站无法查看报告服务,因为我们收到以下错误:

request failed with HTTP status 401

奇怪的是,报告查看器在两个网站中以相同的方式配置完全(只需复制粘贴在两个网站之间)。此外,使用“工作网站”,我们可以查看属于这两个网站的报告 - 使用其他网站,我们无法查看任何报告。

在两种情况下授权都是这样的:

凭证:

[Serializable]
public sealed class ReportServerCreditentials : IReportServerCredentials
{
    public WindowsIdentity ImpersonationUser
    {
        get { return null; }
    }

    public ICredentials NetworkCredentials
    {
        get
        {
            string userName = ConfigurationManager.AppSettings["ReportViewerUser"];
            string password = ConfigurationManager.AppSettings["ReportViewerPassword"];
            string domain = ConfigurationManager.AppSettings["ReportViewerDomain"];

            return new NetworkCredential(userName, password, domain);
        }
    }

    public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password, out string authority)
    {
        authCookie = null;
        userName = null;
        password = null;
        authority = null;

        return false;
    }
}

报告查看器使用情况

public partial class ReportServicesViewer : System.Web.UI.Page
{
    protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string reportingFolder = ConfigurationManager.AppSettings["ReportingFolder"];

            showReport(string.Format("/{0}/{1}", reportingFolder, Request.QueryString["report"]));
        }
    }

    private void showReport(string reportPath)
    {
        RevReport.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["ReportServer"]);
        RevReport.ServerReport.ReportServerCredentials = new ReportServerCreditentials();
        RevReport.ServerReport.ReportPath = reportPath;
    }
}

在aspx中:

<rsweb:ReportViewer ID="RevReport" runat="server" Height="100%" Width="100%" Font-Names="Verdana" Font-Size="8pt" ProcessingMode="Remote" ZoomMode="Percent" ZoomPercent="100"></rsweb:ReportViewer>

其他观察

有一次,我们尝试使用Fiddler来监控网站和RS之间的流量,但在这种情况下,沟通实际上是有效的。

然而,当我稍后尝试这个时,Fiddler给出了以下回应:

[Fiddler] The socket connection to <servername> failed. <br />ErrorCode: 10061. <br />No connection could be made because the target machine actively refused it 10.0.0.17:443                                                                                          

我不确定如何解释这一点,因为我们没有在网站上使用SSL&lt; - &gt; RS通讯。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我们在构建新的SSRS服务器时遇到了类似的问题。 Web应用程序无法连接到报表服务器。我能够通过这样做解决问题:

  1. 在服务器上启用Kerberos身份验证
  2. 在服务器上设置spn(服务器主体名称)
  3. 在Web应用程序中启用模拟