IIS后台线程和SignalR

我需要有一个后台线程来做一些工作,并通过SignalR将数据发送给连接到服务的用户。

我想在IIS中托管这个线程,并在首次命中Application_Start时或在单独的工作进程中生成它。

如果我在IIS中托管它并在应用程序的开头创建它 – 该线程仅在首次点击应用程序时启动。 我一开始服务就需要它运行。 – 我无法通过桌面GUI控制此线程,我无法以简单的方式停止或暂停它。

如果我在一个单独的进程(例如Windows服务)中托管它 – 我无法访问SignalR服务实例 – 我不希望以用户身份连接到SignalR服务以向其他用户发送数据。 我想采用一种不同的方法,这并不意味着工人是SignalR本身的客户。

你对此有何看法? 你还有其他解决方案吗?

我们接近这个的方法是在Web服务可以调用的Web应用程序上创建一个单独的端点。

想象一下,ASP.NET MVC控制器中存在以下URI: http:// [myserver] / api / TellUsers / [msg] 。 在此方法中,您可以获取连接的集线器客户端并进行调用。

[HttpPut] public void TellUsers(string msg) { var connectionManager = AspNetHost.DependencyResolver.Resolve(); var demoClients = connectionManager.GetClients(); demoClients.TellUsers(msg); } 

[在此处插入关于正确错误检查的警告。]

当然,您不必使用MVC。 任何可公开访问的URI都可以。 至于保护它,您可以使用任何有效的技术来保护ASP.NET端点。

我知道问题相当陈旧但是:

事实上,我更喜欢你所拥有的“客户本身”的例子。 这使您可以从许多不同的点而不是一个点进行控制。 示例 – 多个服务可以调用来控制服务。 我看不出有任何理由你不能拥有能够调用其他用户无法调用的“特殊”命令的管理员用户。

对于许多系统来说,这是一个久经考验的设计。 我坚持下去。