【问题标题】:SignalR - Broadcasting over a Hub in another Project from outside of a HubSignalR - 从集线器外部通过另一个项目中的集线器广播
【发布时间】:2013-04-16 17:28:30
【问题描述】:

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

项目 1:“SignalRChat”(MVC) - 工作正常
项目二: “DatabaseWatcherService”Windows 服务 - 工作正常

我正在尝试从我的 Windows 服务调用 SignalRChat Hub,但它似乎无法正常工作。

这是我从 Windows 服务 (https://github.com/SignalR/SignalR/wiki/Hubs#broadcasting-over-a-hub-from-outside-of-a-hub) 调用 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) 内部服务器错误。

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

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

【问题讨论】:

    标签: c# signalr signalr-hub


    【解决方案1】:

    据我所知,这仅在您从 Web 应用程序中调用集线器时才有效。

    为了从 Web 应用程序外部与中心交互,例如从 Windows 服务中,您需要查看 SignalR Client Hubs documentation

    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");  
    

    然后,在您的集线器中,您需要有一个 AddNewMessageToPage 的方法,它接受 hello world 字符串并从这里调用 Clients.All.addNewMessageTopage(message)

    【讨论】:

    • 我有错字.. Hub 名称“MyHub”不正确。一旦我将其更改为我的实际 Hub 名称,它就可以正常工作。谢谢。
    • 这正是我想要的,谢谢! :-)
    • 这很糟糕,不是吗?您向所有客户端公开了addNewMessageTopage,因此任何连接的客户端都可以调用此方法,这显然不是本意。我想从 WinService 向客户端发布消息,但没有找到好方法。
    • 是的,它向所有人公开。它回答了所提出的问题,但您的问题有些不同。
    • @TimBJames:ASP.NET Core 2.2 可以做到这一点吗?或任何其他解决方法。这是我的问题:stackoverflow.com/q/59840085/4753489
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    相关资源
    最近更新 更多