【问题标题】:Execute SSIS Package Using ASP.Net使用 ASP.Net 执行 SSIS 包
【发布时间】:2013-10-08 17:34:28
【问题描述】:

环境描述

我有一个从 asp.net 执行的 SSIS 任务,该包通过 UNC 路径从 excel 文件中获取数据,并将数据放入 sql server 数据库中。我已将 SSIS 部署到文件系统,它具有 Windows 身份验证数据库连接,并且 IIS 用户具有数据库访问权限。我可以作为用于托管 Web 应用程序的 AppPoolUser 登录并打开/修改有问题的文件,以便获得这些基本权限。 Web App 是用 x86 编译的。

何时生效:

当从 Visual Studio (ctrl + shift + W) 运行时,它工作正常,每件事都成功完成。

当它不起作用时:

从客户端浏览器运行时。它上传文件但在包中失败。

我的问题

客户端和服务器有什么不同,我该如何让它工作?我的印象是,在运行 Web 应用程序时,所有连接都通过 AppPool 用户,所以它应该在包含的任何机器服务器上表现相同?我需要这样做而不需要 CMD。

运行 SSIS 包的 c# 代码

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

【问题讨论】:

  • 我同意 Mitch 的观点,这可能是一个安全上下文问题。回避安全上下文问题的一种可能方法是创建一个执行 SSIS 包的存储过程。
  • 你怎么知道它失败了?从返回值?你有日志条目吗?打开并记录并获取更多信息。

标签: c# asp.net ssis


【解决方案1】:

您在部署和运行应用程序的机器(在您的情况下为 Web 服务器)中是否安装了 SSIS 服务或 SSIS 组件(客户端工具)?

您可能在使用 Visual Studio 开发和调试应用程序的同一台开发 PC 中进行投标。通常 SSIS 组件与 BID 一起安装,因此您不需要 SSIS 服务来运行包。这可能是您的包执行在您的开发 PC 中很好的情况。但是,它永远不会在您的网络服务器中运行,因为您的网络服务器中没有安装这些组件。

希望这会对你有所帮助。

问候, 桑迪普

【讨论】:

    【解决方案2】:

    如果您使用Excel源连接,很可能是因为excel驱动程序只能在32位模式下工作,而当您尝试从网络调用它时,它是在64位下执行的。

    检查一下。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 2015-04-21
      相关资源
      最近更新 更多