2

Web サイトのデプロイ時に ASP.NET から SSIS パッケージを実行すると、問題が発生します。MSDB の Integration Services サーバーにパッケージをロードしました。SQL Server Management Studio からパッケージを試すと、正しく実行されます。Visual Studio からコードを実行すると、サーバーにロードされたパッケージが正しく実行されます。この問題は、ページがサーバーにデプロイされたときに発生します。例外はキャッチされず、エラーもログに記録されませんが、パッケージは実行されません。Windows イベント ビューアに「パッケージ "" に失敗しました。」というエラーが表示されます。ASP.NET ページは、SQL Server およびソース Excel ファイルがある共有への「sysadmin」アクセスを持つアカウントの偽装を実行します。

SSIS パッケージを呼び出すコードは次のとおりです。

    public void executePkg(string pkgAddr, string pkgServer, int periodID)
    {
        logger.Info(string.Format("Execution of SSIS Package '{0}' in server '{1}' started.", pkgAddr, pkgServer));
        string pidvar = "User::periodid";
        string pkgLocation;
        Package pkg;
        Application app;
        DTSExecResult pkgResults;
        app = new Application();
        pkgLocation = pkgAddr;
        try
        {
            pkg = (Package)app.LoadFromSqlServer(pkgAddr, pkgServer, null, null, null);
            Variables vars = pkg.Variables;
            int varCount = vars.Count;
            bool varExist = vars.Contains(pidvar);
            pkg.VariableDispenser.LockOneForWrite(pidvar, ref vars);
            vars[pidvar].Value = periodID;
            pkg.Variables[pidvar].Value = periodID;
            vars.Unlock();
            pkgResults = pkg.Execute();
        }
        catch (Exception ex)
        {
            logger.Error(ex.Message);
        }
    }

どんな助けでも大歓迎です。

注: ちょっとした修正ですが、ASP.NET は偽装しなくなり、代わりに AppPool がサービス アカウントで実行されます。動作は両方のシナリオで同じです。

4

3 に答える 3

1

開発ボックスとサーバーのアーキテクチャに違いはありますか?

32 ビット環境でパッケージを開発し、そのパッケージを 64 ビット環境で実行する場合は、接続マネージャーが 64 ビットに準拠している必要があることに注意してください。Excel などの一部の接続マネージャーは、32 ビット環境でのみ機能します。

于 2012-06-08T09:32:52.030 に答える
0

この問題に対する正確な答えはわかりませんが、確認する価値のある提案があります。SSIS パッケージは、SQL Server DB またはファイル システムにインストールされていますか。パッケージにアクセスするには、それぞれ異なる方法が必要です。

http://consultingblogs.emc.com/jamiethomson/archive/2006/02/20/ssis_3a00_-deploy-to-file-system-or-sql-server.aspx

これが解決策であることを願っています。

于 2012-06-07T21:26:26.637 に答える
0

あなたの主な問題はエラー報告の欠如のようです。

初め:

SSIS パッケージでエラー ログが有効になっていますか? OnError イベントに対してのみ、これをオンにします。これにより、データベースに sysssislog というテーブルが作成され、そこにエラー (および選択したその他のログ) が書き込まれます。

https://technet.microsoft.com/en-us/library/ms138020%28v=sql.105%29.aspx

注目すべき点: これを行うと、SSIS は dbo.sysssislog ではなく domain\username.sysssislog というテーブルを作成します。パッケージがこれを行う場合は、間違った名前のテーブルを削除して dbo.sysssislog を作成し、パッケージがそこにエラーを書き込むことができるようにするだけです。

2番:

オブジェクト モデルを使用してパッケージを実行しているため、パッケージからエラーを取得して、それらを処理することができます。デバッグの場合は、メッセージ ウィンドウにそれらをポップアップ表示するだけで、問題が何であるかを確認できます。

これは私が行った方法ですが、十分に油が塗られているかどうかはわかりません。

            Dim errReport As String
            Dim errors As DtsErrors = pkg.Errors

            Dim errItem As Boolean = errors.Contains(0)

            errReport = "No Error"
            If (errItem) Then
                Dim firstEItem As DtsError = errors(0)
                Dim ex As New Exception("The file could not be loaded. Please submit a helpdesk ticket.")
                Throw ex
                errReport = "The following error occurred: " + firstEItem.Description
            End If


            MsgBox(errReport, MsgBoxStyle.OkOnly, pkgResults.ToString)

これが役立つことを願っています。

于 2015-06-11T19:15:06.793 に答える