私はこれを理解しようと多くの時間を費やしましたが、運がなかったので、ここに質問を投稿しようとします.
同じサーバーで 2 つの ASP.NET Web サイトを実行しています。どちらの Web サイトも IIS 7.5 + .NET 4 で実行されています。これらのサイトは、SSRS レポート ビューアーを使用して、別のサーバーからのレポートを表示します。
最近、Web サイトと RS の両方を新しいサーバーに移動しました (RS 2005 から RS 2008 に切り替え、IIS 7.0 から IIS 7.5 に切り替えました)。ただし、新しいサーバーに移動した後、次のエラーが発生するため、Web サイトの 1 つでレポート サービスを表示できません。
request failed with HTTP status 401
奇妙なことに、Report Viewer は2 つの Web サイトでまったく同じように構成されています (単純に 2 つの Web サイト間でコピーを貼り付けただけです)。さらに、「作業中の Web サイト」を使用すると、両方の Web サイトに属するレポートを表示できますが、もう一方の Web サイトを使用すると、いずれのレポートも表示できません。
どちらの場合も、承認は次のようになります。
資格:
[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 を使用して Web サイトと 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
ウェブサイト <-> RS 通信に SSL を使用していないため、これを正確に解釈する方法がわかりません。
アドバイスをいただければ幸いです。