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 がサービス アカウントで実行されます。動作は両方のシナリオで同じです。