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项目上运行。
这只会工作,据我所知,当你从web应用程序内调用集线器。
为了从web应用程序外部(例如从Windows服务)与hub进行交互,您需要查看SignalR Client Hubs文档
-
添加以下NuGet包到您的项目:
Microsoft.AspNet.SignalR.Client
-
在页面顶部添加以下语句:
using Microsoft.AspNet.SignalR.Client;
-
您需要创建到集线器的连接,然后启动该连接。
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)