環境の説明
asp.net から実行する SSIS タスクがあり、パッケージは UNC パスを介して Excel ファイルからデータを取得し、そのデータを SQL Server データベースに配置します。SSIS をファイル システムに展開しました。これには Windows 認証データベース接続があり、IIS ユーザーにはデータベース アクセスがあります。Web アプリケーションをホストするために使用した AppPoolUser としてログインし、問題のファイルを開いたり変更したりして、これらの基本的なアクセス許可を取得できます。Web アプリは x86 でコンパイルされています。
それが機能する場合:
Visual Studio (ctrl + shift + W) から実行すると、正常に動作し、すべてが正常に完了します。
うまくいかないとき:
クライアント ブラウザから実行する場合。ファイルをアップロードしますが、パッケージで失敗します。
私の質問
クライアントとサーバーの違いと、それを機能させるにはどうすればよいですか? Web アプリを実行すると、すべての接続が AppPool ユーザーを経由するので、含まれているどのマシン サーバーでも同じように動作するはずだという印象を受けましたか? CMDを必要とせずにそうする必要があります。
c# SSIS パッケージを実行するコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SqlServer.Dts.Runtime;
public partial class Pages_Quality : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Upload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileExt =
System.IO.Path.GetExtension(FileUpload1.FileName);
if (FileUpload1.FileName == "Breached.xlsx")
{
try
{
FileUpload1.SaveAs("*:\\***\\***\\" +
FileUpload1.FileName);
Label1.Text = "Upload Done";
Application app = new Application();
Package package = app.LoadPackage(@"*:\**\**\Quality.dtsx", null);
DTSExecResult result = package.Execute();
Label2.Text = (result.ToString());
}
catch (Exception ex)
{
Label1.Text = "ERROR: " + ex.Message.ToString();
}
}
else
{
Label1.Text = "Only Breached.xls is allowed!";
}
}
else
{
Label1.Text = "You have not specified a file.";
}
}
}