1

フォーム認証を使用するWebフォームアプリがあります。InfoView.NETがインストールされて動作しているCrystalReportsServer2008V1サーバーがあります。いくつかのエンタープライズアカウントを設定しています。編集:私のWebフォームアプリはCrystalReportsServerとは別のサーバー上にあることに注意してください。

カスタムASP.NETページ(C#)でプログラムによってInfoView .NETにログオンし、ログオン情報を入力せずにユーザーをInfoViewに転送する方法を知る必要があります。

このようなものがいいでしょう(C#):

string username = "blah";
string password = "asdf";

// create logon token for crystal reports server
// .. // this is the code I need
Response.Redirect(url);

私はこの質問を見つけました。それは私を途中まで連れて行きます、しかしそれは私にトークンをInfoView.NETに渡す方法を教えてくれません。古いドキュメントの中には、Cookieが必要であると記載されているものもあります。Java InfoViewに渡す方法を示す他のサイトも見つけましたが、.NETバージョンが必要です。

4

2 に答える 2

3

この投稿をこのソリューションの参考として使用しました。

このソリューションには 2 つの要素があります。

  • CMS セッションを作成するためのカスタム Web アプリのページ
    • 私の Web アプリは、ログオンしているユーザーを認識しているためです。
  • InfoView ログインをバイパスするためのサーバー上のページ
    • 私の Web アプリは、InfoView のセッション変数と Cookie を設定できないためです。

手順は次のとおりです。

  1. Web アプリで転送ページをセットアップします。
  2. 必要な DLL をサーバーにコピーします。
  3. サーバーにバイパス ページをセットアップします。

転送ページ

  1. Crystal Reports Server SDK がインストールされている必要があります。Crystal Reports Server CD からインストールできます (クライアント ツールなどと呼ばれます)。
  2. CrystalDecisions.Enterprise.Framework へのプロジェクト参照を追加します。Copy Local = True に設定します。
  3. ページを作成。それにボタンを追加します。ボタンに OnClick イベントを追加します。
  4. ページ分離コードの名前空間の参照:

    using CrystalDecisions.Enterprise;
    
  5. OnClick イベント コード

    string username = "user";
    string password = "password";
    string server = "CMSNAME:6400";
    string auth_type = "secEnterprise";
    // logon
    SessionMgr session_mgr = new SessionMgr();
    EnterpriseSession session = session_mgr.Logon(username, password, server, auth_type);
    // get the serialized session
    string session_str = session.SerializedSession;
    // pass the session to our custom bypass page on the CRS
    string url = "http://reportserver.domain.com/InfoViewApp/transfer.aspx?session="
    url += HttpUtility.UrlEncode(session_str);
    Response.Redirect(url);
    

DLL をコピーする

  1. Transfer ページを含むプロジェクトをビルドします。
  2. プロジェクト フォルダの bin/Debug で、ファイル CrystalDecisions.Enterprise.Framework.dll を見つけて、サーバーの C:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\Web Content\InfoViewApp\InfoViewApp\bin にコピーします。 . Windows 2008 R2の場合、パスの「Program Files」は「Program Files (x86)」にする必要があります。

バイパスページ

  1. サーバーでメモ帳を開き、以下を貼り付けます。

    <%@ Page Language="C#" %>
    <script runat="server">
    private const string SESSION_PARAM = "session";
    private const string SESSION_KEY = "INFOVIEW_SESSION";
    private const string COOKIE_KEY = "InfoViewdotnetses";
    private const string LOGON_URL = "logon.aspx";
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (Request.QueryString[SESSION_PARAM] != null)
            {
                string sessionStrRaw = Request.QueryString[SESSION_PARAM];
                string sessionStr = System.Web.HttpUtility.UrlDecode(sessionStrRaw);
                CrystalDecisions.Enterprise.SessionMgr sessionMgr = new CrystalDecisions.Enterprise.SessionMgr();
                CrystalDecisions.Enterprise.EnterpriseSession entSession = sessionMgr.GetSession(sessionStr);
                BusinessObjects.Enterprise.Infoview.Common.CrystalIdentity identity;
                identity = new BusinessObjects.Enterprise.Infoview.Common.CrystalIdentity(entSession, System.Web.HttpContext.Current);
                HttpContext.Current.Session.Add(SESSION_KEY, identity);
                //Create the InfoViewdotnetses cookie which holds the SerializedSession
                HttpCookie InfoViewdotnetses = new HttpCookie(COOKIE_KEY);
                InfoViewdotnetses.Value = System.Web.HttpUtility.UrlEncode(sessionStrRaw);
                InfoViewdotnetses.Path = @"/";
                Response.Cookies.Add(InfoViewdotnetses);
            }
            Response.Redirect(LOGON_URL);
        }
        catch (Exception ex) { Response.Write(ex.ToString()); }
    }
    </script>
    
  2. ページを transfer.aspx として C:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\Web Content\InfoViewApp\InfoViewApp に保存します。(Windows 2008 R2 の場合は、上記の注を参照してください。)

それでおしまい。それが私のために働いたものです。

于 2010-01-14T23:58:01.793 に答える
1

これで問題が解決します:

コードを aspx の page_load にコピーして、認証済みトークンをレポートに渡します。

    protected void Page_Load(object sender, EventArgs e)
    {
        string username = "user";
        string password = "password";
        string server = "<boe server>";
        string auth_type = "<auth type>";
        // e.g. string auth_type = "Windows AD"

        string token; string tokenEncoded; 

        int reportid = <reportid>; 
        string report_params = "<param1>=<value1>&<param2>=<value2>";

        // logon
        SessionMgr session_mgr = new SessionMgr();
        EnterpriseSession session = session_mgr.Logon(username, password, server, auth_type);

        // create token from session manager
        token = session.LogonTokenMgr.CreateLogonTokenEx("", 120, 100);
        tokenEncoded = HttpUtility.UrlEncode(token);

        // pass the token to the custom bypass page on the CRS
        string url = string.Format("http://{0}/OpenDocument/opendoc/openDocument.aspx?sIDType=wid&iDocID={1}&lsS{2}&token={3}",
            server, reportid, param, tokenEncoded);

        Response.Redirect(url);
    }
于 2011-07-13T18:50:37.957 に答える