SSIS包触发与文件监控服务实现

在本文中,将探讨一个场景,即在特定目录下添加新文件时触发SSIS包的执行。为了实现这一功能,需要一个始终运行的监控服务来检测变化并触发包。因此,文章将解释如何实现这一过程。

本文是对之前的另一篇文章《动态Excel文件加载与SSIS》中收到的评论/问题的回应。

使用代码

让定义实现目标的几个重要方面:

  • 创建一个Windows服务,始终监控所需的文件夹以检测变化。
  • 基于步骤1中的事件触发包。

打开Visual Studio命令提示符(开始 > 所有程序 > Visual Studio 20xx > Visual Studio工具 > Visual Studio命令提示符)。 在命令提示符中输入以下命令以安装服务:

installutil "C:\Folder1\Folder2\Yourservice.exe"

打开Visual Studio命令提示符(开始 > 所有程序 > Visual Studio 20xx > Visual Studio工具 > Visual Studio命令提示符)。 在命令提示符中输入以下命令以卸载服务:

installutil /u "C:\Folder1\Folder2\Yourservice.exe"

打开命令提示符(开始 > 运行,输入cmd将启动命令提示符)。 接下来:

  • 启动服务:net start Yourservicename
  • 停止服务:net stop Yourservicename

任何动态设置的修改(例如修改配置条目)只有在停止并重新启动服务后才会被反映。

构建WMI查询

让构建一个查询以监控任何文件创建(也可以复制文件到该位置):

string WMIQuery = "SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE TargetInstance ISA \"CIM_DirectoryContainsFile\" and TargetInstance.GroupComponent=\"Win32_Directory.Name='C:\\Test\\MyFolderToMonitor'\"";

上述WMI查询将捕获在指定文件夹内10秒内发生的任何文件创建事件。

从C#执行SSIS

可以使用Microsoft.SQLServer.ManagedDTS(正常位置是:C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SQLServer.ManagedDTS.dll)库从C#执行包。

让构建一个小程序类来实现这一点。请参见以下类以了解其工作原理。它非常简单,只需加载提供的路径上的包,并使用Package对象的Execute方法。

如何使服务灵活

应该能够:

  • 更改/修改“监控目录”的路径。
  • 控制WMI查询间隔时间。
  • 控制WMI轮询线程的睡眠时间。
  • 控制要执行的包。
  • 控制服务和包日志路径的位置。

所有上述事项都可以通过以下简单的配置文件进行控制:

管理/处理配置

可以构建一个小程序类来管理配置,并随时准备好,即无需再次实际访问配置。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485