我有一个长期运行的 SSIS 包,其中包含许多数据流任务(有关 SSIS 的更多信息,请参阅此问题)。在这些任务之间,我想将实时状态更新发送到在 IIS 7.0 中托管的面向 Intranet 的 ASP.NET MVC 4 应用程序中运行的 SignalR 集线器,以便用户可以查看进度。
从 SSIS 向 SignalR 集线器客户端发送状态更新消息的最佳方式是什么?
以下 SSIS 任务似乎能够将消息传递到外部系统:
SSIS 消息队列任务:在服务器上使用 MSMQ 私有队列起初听起来很容易,除了 MSMQ 有点过时、未维护且缺乏文档。也没有明显的方法可以与现有的启用 SignalR 的 Web 应用程序集成。有一篇关于连接到 MSMQ 的自托管 SignalR 集线器的文章,但是这种方法在 ASP.NET MVC 应用程序中是否可行?
SSIS 执行 SQL 任务:我已经从 SSIS 执行此操作(更新作业表中的 status_id),因此困难的部分是检测这些更改并通过 SignalR 集线器路由它们。SignalR已经可以使用 SQL Server 进行横向扩展,但此技术假定所有消息一开始都是通过SignalR 集线器进入的,此处并非如此。其他人谈论使用SqlDependency,但这是否可以让 ASP.NET 应用程序查看数据库表并收到所有更新的通知?
使用 SSIS 脚本任务发送 HTTP 请求 (C#):经过反思,这似乎是最直接的路线,但有一些注意事项。我正在构建的 Web 应用程序经过 NTLM 身份验证,因此我需要将 System.Net.WebRequest 与身份验证一起使用,这在 SSIS 中可能有问题,也可能没有问题。
关于#3 的更新:SSIS 包正在 SQL Server 中运行。如果我使用System.Net.CredentialCache.DefaultNetworkCredentials
. 因此,如果可以使用备用 NTLM 凭据(即不是从运行包的帐户派生),WebRequest 似乎只能在这种情况下工作。该站点不接受基本的 HTTP 身份验证。
更新 2:看起来 System.Net.NetworkCredentials 可以用任意域/用户/密码实例化并应用于 WebRequest。我尚未在 SSIS 任务中的生产环境中对此进行测试。这个问题仍然悬而未决,因为维护许多相同的 SSIS 脚本任务(或开发可重用的 SSIS 任务)相当麻烦。可能有一个更简单、更快或更易于维护的解决方案。
关于赏金的更新 3:400 代表的赏金将授予提出可行策略并至少提供一些基本细节的最佳答案。