SignalR -在另一个项目的集线器上从集线器外广播

本文关键字:集线器 广播 另一个 项目 SignalR | 更新日期: 2023-09-27 18:10:34

我的解决方案中有两个项目:

项目1:"SignalRChat"(MVC) -工作良好
项目2:"DatabaseWatcherService" Windows Service - Works fine

我正在尝试从我的Windows服务呼叫我的SignalRChat Hub,它似乎不工作。

这是我调用我的Hub从我的windows服务(https://github.com/SignalR/SignalR/wiki/Hubs#broadcasting-over-a-hub-from-outside-of-a-hub):

void PerformTimerOperation(object sender, EventArgs e)
    {
        eventLog1.WriteEntry("Timer ticked...");
        var message = "test";
        var context = GlobalHost.ConnectionManager.GetHubContext<SignalRChat.ChatHub>();
        context.Clients.All.addNewMessageToPage(message);
    }

尝试连接时出现以下错误:

Message=远程服务器返回了一个错误:(500)Internal server error .

我正在尝试通过var connection = new HubConnection("http://localhost:2129");连接

端口2129是我的MVC项目上运行。

SignalR -在另一个项目的集线器上从集线器外广播

这只会工作,据我所知,当你从web应用程序内调用集线器。

为了从web应用程序外部(例如从Windows服务)与hub进行交互,您需要查看SignalR Client Hubs文档

  1. 添加以下NuGet包到您的项目:Microsoft.AspNet.SignalR.Client

  2. 在页面顶部添加以下语句:using Microsoft.AspNet.SignalR.Client;

  3. 您需要创建到集线器的连接,然后启动该连接。


var connection = new HubConnection("http://mysite/");
IHubProxy myHub = connection.CreateHubProxy("MyHub");
connection.Start().Wait(); // not sure if you need this if you are simply posting to the hub
myHub.Invoke("addNewMessageToPage", "Hello World");  

在您的hub中,您需要为AddNewMessageToPage提供一个方法,该方法接受hello world字符串,并从这里调用Clients.All.addNewMessageTopage(message)