c# - IIS 后台线程和 SignalR

标签 c# multithreading iis signalr

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

我想在 IIS 中托管此线程,并在第一次点击 Application_Start 时或在单独的工作进程中生成它。

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

如果我将其托管在单独的进程中,例如 Windows 服务 - 我无权访问 SignalR 服务实例 - 我不想作为用户连接到 SignalR 服务来向其他用户发送数据。我想要一种不同的方法,这种方法并不意味着工作人员是 SignalR 本身的客户端。

您对此有何看法?你看到任何其他解决方案吗?

最佳答案

我们解决这个问题的方法是在您的 Windows 服务可以调用的 Web 应用程序上创建一个单独的端点。

假设以下 URI 存在于 ASP.NET MVC Controller 中:http://[myserver]/api/TellUsers/[msg]。在此方法内部,您可以获得连接的集线器客户端并进行调用。

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

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

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

关于c# - IIS 后台线程和 SignalR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9942591/

相关文章:

asp.net - 如何在 DotNetNuke 上运行新网站?

c# - 如何像字节数组一样处理使用 protobuf 存储的 System.Drawing.Image?

multithreading - Qt 线程在调用 exit/quit 后不会停止

C++11:如果不为 std::thread 调用 join() 会发生什么

date - iis 10 windows 10 日期格式

c# - Visual Studio IIS HTTP 503 服务不可用

c# - Diamond-Square 算法不产生 "smooth"噪声

c# - 实现 IEnlistmentNotification 时我应该在哪里执行操作?

c# - 关键部分可以无限期地停止处理器吗?

c++ - Win32、MFC : Ending threads