2

私はこれを理解しようと多くの時間を費やしましたが、運がなかったので、ここに質問を投稿しようとします.

同じサーバーで 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 を使用していないため、これを正確に解釈する方法がわかりません。

アドバイスをいただければ幸いです。

4

1 に答える 1