2010-08-12 57 views
6

我需要从ASP.NET C#页面上单击加载并执行SSIS或DTS包,单击按钮并在执行结束时报告成功或失败,如果它失败的细节应该显示给用户。它需要是异步的,因为工作可能需要很长时间才能完成。用户应该也可以在运行时取消程序包的执行,如果他愿意的话。还需要并行执行多个程序包并跟踪每个程序包的进度。这是可能实现OR过于复杂,从ASP.NET做到这一点?如果您有任何示例代码或链接,请告诉我。提前致谢。从ASP.NET异步执行SSIS或DTS包装

+0

如果你有多个池,那么你需要一个公共的数据库表和一个单独的类来处理这个并行执行的问题。不是一件容易的事,我们有这样的一个,但我们有很多小时的工作和它的习惯。 – Aristos 2010-08-12 10:37:23

回答

1

我解决了这个问题,方法是在表中将DTS/SSIS包执行的用户请求排队,然后在Windows服务中读取它们并通过使用ThreadPool类产生线程并行执行它们。它工作正常。谢谢。这种方法的缺点是轮询,使其事件驱动,创建一个WCF服务,并将其托管在Windows服务将是最好的,我会接下来尝试。感谢你的回复。顺便说一句,我不能使用SQL Server代理,这是不允许的,因为我的公司的IT政策。

1

您可能会考虑的解决方案是使用SQLServer作业。您可以将软件包设置为有或没有运行计划的作业。您可以通过在msdb系统数据库中运行存储过程和查询来启动,取消,获取作业状态并获取失败信息。您可以运行ASP.NET C#页面中的过程和查询。

在作业中运行SSIS/DTS包是常用的方法。而且,该解决方案还允许您使用Management Studio来管理这些作业。

+0

感谢您的回复,但这是如何工作的? SSIS/DTS包存储在网络服务器上。我需要在网络服务器上创建一个作业吗?如果是这样,我是否需要在其上安装SQL组件来创建作业(不确定我公司的服务器策略是否允许这样做)?存储过程如何知道位于其他位置的作业? – RKP 2010-08-12 13:55:51

+0

你确定SSIS/DTS在网络服务器上吗?它们应该是DB的一部分... – 2010-08-12 14:16:59

+0

是的,SSIS/DTS包不在数据库中,它们存储在Web服务器上的文件系统上。如果我需要创建一个作业并使用存储过程调用它,那么是否需要在Web服务器上安装任何SQL组件?如果没有,我将不得不在我原来的问题中选择。 – RKP 2010-08-12 14:35:49

0

您可以使用Rhino ETL代替SSIS。这是一个功能完备的ETL库,它允许您使用C#编写ETL作业。

+0

ETL ?? ahhh谢谢Google:** E ** xtract ** T ** ransform ** L ** oad – 2013-07-17 10:38:36