我花了很多时间试图解决这个问题,但没有运气 - 所以我会尝试在这里发布这个问题。
我在同一台服务器上运行 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 用于网站 <-> RS 通信。
任何建议将不胜感激。