1

SSRS レポートがあり、Web プロジェクトでこのレポートを呼び出しています。以下の画像のような私のクライアント側のページ:

Webサイト

私の .cs ページ コードは次のとおりです。

public reports()
{
    Init += Page_Init;
    Load += Page_Load;
}

protected void Page_Init(object sender, System.EventArgs e)
{
    ReportViewer1.ServerReport.ReportServerCredentials = new MyReportServerCredentials();
}

[Serializable()]
public sealed class MyReportServerCredentials : IReportServerCredentials
{
    public string UserName = ConfigurationManager.AppSettings["rvUser"];
    public string Password = ConfigurationManager.AppSettings["rvPassword"];

    public string Domain = ConfigurationManager.AppSettings["rvDomain"];
    public WindowsIdentity ImpersonationUser
    {
        //Use the default windows user.  Credentials will be
        //provided by the NetworkCredentials property.

        get { return null; }
    }

    public ICredentials NetworkCredentials
    {
        get
        {
            //Read the user information from the web.config file. 
            //By reading the information on demand instead of storing
            //it, the credentials will not be stored in session,
            //reducing the vulnerable surface area to the web.config
            //file, which can be secured with an ACL.

            if ((string.IsNullOrEmpty(UserName)))
            {
                throw new Exception("Missing user name from web.config file");
            }

            if ((string.IsNullOrEmpty(Password)))
            {
                throw new Exception("Missing password from web.config file");
            }

            if ((string.IsNullOrEmpty(Domain)))
            {
                throw new Exception("Missing domain from web.config file");
            }

            return new NetworkCredential(UserName, Password, Domain);
        }
    }

    public bool GetFormsCredentials(out Cookie authCookie,
              out string userName, out string password,
              out string authority)
    {
        authCookie = null;
         userName = UserName;
         password = Password;
         authority = Domain;
        // Not using form credentials
        return false;
    }



    private void ShowReport()
    {
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri(reportServer);
        ReportViewer1.ServerReport.ReportPath = "/xyz/ReportNewname";
        ReportParameter[] param = new ReportParameter[8];
        param[0] = new ReportParameter("p_ClientID", ClientID);
        param[1] = new ReportParameter("p_CarrierID", carrierId);
        param[2] = new ReportParameter("p_StartDate", BeginDate);
        param[3] = new ReportParameter("p_EndDate", EndDate);
        param[4] = new ReportParameter("p_ClaimSubTypeID", ClaimTypeID);
        param[5] = new ReportParameter("p_SalesAuditorId", SalesAuditorID);
        param[6] = new ReportParameter("p_IsPaid", PaidClaim);
        param[7] = new ReportParameter("p_IsOpen", OpenClaim);
        ReportViewer1.ServerReport.SetParameters(param);
}

私の質問は次のとおりです。GUI(請求(有料))アイテムの左側のツリービューをクリックして、開始日と終了日を入力するのは初めてです。レポートは正常に機能します。さて、この後、Claim(ALL) のような他のアイテムをクリックし、その後もう一度 (Claims(Paid)) をクリックして、同じ日付パラメーターを指定すると、次のエラーが表示されるとします。

リクエストは HTTP ステータス 401: Unauthorized で失敗しました。

IIS にデプロイして実行しようとすると、次のエラーが表示されます。

このページにアクセスした場合は、AFS Claims がこのページを表示する原因となったエラーが発生しています。ユーザー エクスペリエンスにエラーがないことを確認するためにあらゆる努力を払っていますが、発生したエラーが、私たちが認識していないものである場合があります。

ブラウザの [戻る] ボタンを選択して、最後に使用しようとしていたページを確認してください。

注意: セキュリティ上の理由から、ログインを記憶するチェックボックスを選択した場合でも、ログインしているユーザーに対してこの Web サイトでのセッション時間制限があります。セッションのタイムアウトを超えた場合、完了しようとしているアクションが機能しない可能性が高くなります。

誰でも私を助けることができますか?1回目はうまくいくのに、2回目はうまくいかないのはなぜですか?

4

1 に答える 1

1

ページの init メソッドではなく、ShowReport() メソッドに資格情報の設定部分を配置してみてください。ブレークポイントを設定して、2 番目の要求で資格情報がどのように表示されるかを確認します。

于 2013-08-07T02:32:49.703 に答える