4

ReportASP.NET Web アプリケーションを使用して (rdlc ファイル)に接続しようとしています。私はVS2010で作業しており、Report Serverバージョンは2008です。

正常に動作するレポートへの次の URL があります。

http://server url/Products/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/Products/Dashboards/Product_tool.rdl&Source=Server Url/Products/Dashboards/Forms/AllItems.aspx&DefaultItemOpen=1

ブラウザにその URL を入力すると、最初にユーザー名のパスワードを要求されます。ログインすると、Report問題なく表示されます。

ここで、このレポートをReport Viewer. だから私は自分のページにReport Viewerコントロールを追加しました。aspxそのための URL を次のように構成しました。

Report Server:** http://server url/Products/_layouts/ReportServer

Report Path:** /Products/Dashboards/Product_tool.rdl

それが正しいかどうかはよくわかりません..?

いずれにせよ、私のPageLoad私には次のコード行があります。

eportViewer1.ServerReport.ReportServerCredentials = new ReportCredentials("myuser", "mypass");

ReposrtCredentialsクラスは次から取得されます: http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/c65abca7-0fdb-40fb-aabe-718f63377a55/ (フィルから)

Web アプリケーションを実行すると、次のエラーが表示されます。

レポート サーバーへの接続に失敗しました。接続情報を確認し、レポート サーバーが互換性のあるバージョンであることを確認してください。

提供した URLReport Viewerが正しいかどうかわかりません。または、他に何が問題になる可能性がありますか。

誰でもアイデア..?

4

2 に答える 2

4

SSRS レポートを ASP.NET アプリケーションに統合するには、次の手順に従います。

まず、IReportServerConnection2 インターフェイスを実装します。私はこのようなことをしました:

  public sealed class CustomReportServerConnection : IReportServerConnection2
    {
        public WindowsIdentity ImpersonationUser
        {
            get
            {
                // Use the default Windows user.  Credentials will be
                // provided by the NetworkCredentials property.
                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.

                // User name
                string userName = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_USER].ToString(); 

                if (string.IsNullOrEmpty(userName))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_USER_NAME);

                // Password
                string password = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_PASSWORD].ToString();

                if (string.IsNullOrEmpty(password))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_PWD);

                // Domain
                string domain = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORTS_DOMAIN].ToString();

                if (string.IsNullOrEmpty(domain))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_DOMAIN);

                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;
            // Not using form credentials
            return false;
        }
        public Uri ReportServerUrl
        {
            get
            {
                string url = ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_SERVER_URL].ToString();

                if (string.IsNullOrEmpty(url))
                    throw new Exception(Utility.Constants.AppConst.MESSAGE_MISSING_URL);

                return new Uri(url);
            }
        }
        public int Timeout
        {
            get
            {
                return int.Parse(ConfigurationManager.AppSettings[Utility.Constants.AppConst.REPORT_SERVER_TIME_OUT].ToString());
                // return 60000; // 60 seconds
            }
        }
        public IEnumerable<Cookie> Cookies
        {
            get
            {
                // No custom cookies
                return null;
            }
        }
        public IEnumerable<string> Headers
        {
            get
            {
                // No custom headers
                return null;
            }
        }
    }

構成 AppSettings に次のキーを配置します (または、必要な場所からこれらの値を提供します)。

    <add key="ReportServerUrl" value="http://sqlServerURL/ReportServer_SQL2008R2"/>

    <!--Development TargetReportFolder-->
    <add key="TargetReportFolder" value="/AppReporting/"/>
    <add key="ReportServerTimeOut" value="600000"/>
    <add key="ReportViewerServerConnection" value="FullyQualified Name of ur CustomReportServerConnection,ProjectName"/>
    <add key="ReportsUser" value="ReportUser"/>
    <add key="ReportsPassword" value="reportPassword"/>
    <add key="ReportsDomain" value="myDomain"/>

次に、.aspx ページで、reportViewer を次のようにドラッグします。

<rsweb:ReportViewer ID="RptViewer" runat="server" AsyncRendering="False" SizeToReportContent="true"
            ProcessingMode="Remote" Width="100%" BackColor="#F7F8F9" OnReportError="RptViewer_ReportError"
            OnReportRefresh="RptViewer_ReportRefresh1" Height="">
        </rsweb:ReportViewer>

コードビハインドでReportViewerを構成します..ReportParameter適切に配置してください。

それはあなたにアイデアを与えるでしょう...

ポイントは、適切に認証する必要があるため、カスタムReportServerConnectionを作成することです

于 2013-01-16T13:53:13.477 に答える
1

レポート ビューアーを構成するときは、使用するアカウントにレポートを表示する権限があるかどうかを確認してください。サーバー レポートを使用する場合はアクセス権が必要です。こちらのリンクもご覧ください。彼らは助けになるでしょう:http://forums.asp.net/t/1562624.aspx/1

于 2013-01-16T12:25:25.303 に答える