1

環境の説明

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.";
        }
    }
}
4

2 に答える 2