I have a long-running SSIS package with many data flow tasks (see this question for more info on SSIS). Between these tasks, I'd like to send real-time status updates to a SignalR hub running in an intranet-facing ASP.NET MVC 4 app hosted in IIS 7.0, so users can watch the progress.
What is the best way to send status update messages to SignalR hub clients from SSIS?
The following SSIS tasks seem to be capable of delivering messages to outside systems:
SSIS Message Queue Task: Using an MSMQ private queue on the server sounds easy at first, except that MSMQ is a bit outdated, unmaintained, and lacking in documentation. There also isn't an obvious way to integrate with an existing SignalR-enabled web app. There is a write-up about a self-hosted SignalR hub with connections to MSMQ, but would this approach be possible inside an ASP.NET MVC app?
SSIS Execute SQL Task: I'm already doing this from SSIS (updating a status_id in a jobs table), so the hard part would be detecting these changes and routing them through the SignalR hub. SignalR already can use SQL Server for scaling out, but this technique assumes all messages are coming in through a SignalR hub to begin with, which is not the case here. Others talk about using SqlDependency, but could that enable an ASP.NET app to watch a DB table and be notified of all updates?
Use the SSIS Script task to send an HTTP request (C#): Upon reflection, this seems the most straightforward route, with a few caveats. The web application I'm building is NTLM-authenticated, so I'd need to use System.Net.WebRequest with authentication, which may or may not have issues within SSIS.
UPDATE regarding #3: the SSIS package is being run within SQL Server. The Windows account it's running under will fail authorization if I authenticate to the site using System.Net.CredentialCache.DefaultNetworkCredentials
. So it seems WebRequest can only work in this scenario if it's possible to use alternate NTLM credentials (i.e. not derived from the account under which the package is running). The site does not accept basic HTTP authentication.
UPDATE 2: It looks like System.Net.NetworkCredentials can be instantiated with arbitrary domain/user/password and applied to WebRequest. I have yet to test this in production within an SSIS task. The question remains open because maintaining many identical SSIS Script tasks (or developing a reusable SSIS Task) is rather cumbersome. There may be an easier, faster, or more maintainable solution.
UPDATE 3 regarding bounty award: the 400-rep bounty will be awarded to the best answer that proposes a workable strategy and provides a few basic details at minimum.