以编程方式运行SSIS包的问题

时间:2010-09-02 10:43:46

标签: c# asp.net wcf ssis

我花了好几天时间试图解决这个问题并且仍然坚持这个,我已经在这个网站上发布了一些问题,但没有得到满意的答案。我这次想要更清楚,希望得到一个更好的答案。我已经阅读了这篇文章http://blogs.msdn.com/b/michen/archive/2007/03/22/running-ssis-package-programmatically.aspx 这是我的问题(我需要从ASP.NET运行SSIS包)

  1. 选项1不适合我,因为如果消耗内存它可以回收工作进程

  2. 选项2也不合适,因为创建新流程的安全性问题并将上下文传递给新流程对我来说看起来非常复杂(根据支持文章)

  3. 选项3不合适,因为我正在为我所工作的公司不允许使用SQL Server代理来运行SSIS包(我想它需要在应用服务器上安装db引擎,不确定)。但SSIS安装在应用程序服务器上。

  4. 选项4和5将与选项1和2具有相同的问题。

  5. 我想现在唯一的选择是创建一个Windows服务并从ASP.NET启动服务。但这会允许并行运行多个包吗?或者有更好的替代解决方案吗?请告诉我。感谢。

2 个答案:

答案 0 :(得分:0)

您使用Windows服务正确。

不要从asp.net运行SSIS包,而是让asp.net将条目放入队列或列表中。然后获取Windows服务以监视列表。

当Windows服务看到列表中有新项目时,它会运行列表项所引用的SSIS包。

这样做的好处是,在SSIS包运行时,网页不必等待。

答案 1 :(得分:0)

我过去用

制作了这样的东西
  • 监视数据库表的Windows服务
  • 在数据库表中插入作业的asp.net页面
  • 每个工作都是(一组)ssis包
  • Windows服务在启动时配置为池中的多个线程
  • 每次Windows服务看到一个新作业时,它会检查是否有可用的线程,并使用System.Diagnostics.Process启动带有要使用dtexec.exe运行的作业的线程(您可以使用SSIS类库,但我发现dtexec.exe更有用
  • 线程(和作业)在Windows服务的安全上下文中运行,因此使用Windows服务使用的Windows凭据
  • 作业完成后,Windows服务会更新数据库表

您可以将此更改为不使用表,并使用在作业完成时返回的asynch方法从Windows服务公开wcf服务。在这种情况下,我不确定如何使用多个线程,但我认为通过使它成为异步,你也可以使它本身具有多线程。