来自集线器外部的SignalR广播不起作用

Nul*_*nce 6 c# asp.net-mvc signalr

根据这里的wiki文章:https://github.com/SignalR/SignalR/wiki/Hubs

我可以通过我的集线器获取我的MVC应用程序来广播消息:

$(function () {
    // Proxy created on the fly          
    var chat = $.connection.chatterBox;

    // Declare a function on the chat hub so the server can invoke it          
    chat.client.addMessage = function (message) {
        $('#messages').append('<li>' + message + '</li>');
    };

    // Start the connection
    $.connection.hub.start().done(function () {
        $("#broadcast").click(function () {
            // Call the chat method on the server
            chat.server.send($('#msg').val());
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我的Hub位于一个名为ServerHub.dll的独立DLL中,如下所示

namespace ServerHub
{
    public class ChatterBox : Hub
    {

        public void Send(string message)
        {
            Clients.All.addMessage(message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,通过上面的设置,我可以浏览几个不同浏览器上的相同URL,并从一个浏览器发送消息,将反映在所有其他浏览器中.

但是,我现在要做的是从控制器内发送消息.

所以在我开箱即用的MVC互联网应用程序中,在HomeController,About动作中,我添加了这个:

using ServerHub;

    public ActionResult About()
    {
        ViewBag.Message = "Your app description page.";

        var context = GlobalHost.ConnectionManager.GetHubContext<ChatterBox>();
        context.Clients.All.say("HELLO FROM ABOUT");

        return View();
    }
Run Code Online (Sandbox Code Playgroud)

但上述似乎并没有起作用.没有错误消息或运行时错误.代码执行,只是我在其他浏览器上看不到该消息.

我哪里做错了?

dav*_*owl 10

您正在调用一个名为"say"的方法,并且您只在客户端上定义了一个名为"addMessage"的方法.

更改:

    context.Clients.All.say("HELLO FROM ABOUT");
Run Code Online (Sandbox Code Playgroud)

至:

    context.Clients.All.addMessage("HELLO FROM ABOUT");
Run Code Online (Sandbox Code Playgroud)