首页 > 解决方案 > SingalR 消息未发送到客户端且没有任何错误

问题描述

我有一个集线器类:

 public class OrderHub : Hub
    {
        public override Task OnConnected()
        {
            Clients.Caller.orderMessage("New connection");
            return base.OnConnected();
        }

        public static void SendOrderMessage(string msg)
        {
            var hubContext = GlobalHost.ConnectionManager.GetHubContext<OrderHub>();
            hubContext.Clients.All.orderMessage(msg);
        }
    }

调用静态方法的事件处理程序:

    public async Task Handle(IOrderProcessedEvent message, IMessageHandlerContext context)
    {
        // Here we could write a code with SignalR to notify the page about successful process

        while (true)
        {
            await Task.Delay(1000);

            //orderHub.OrderMessage("Order processed successfully");
            OrderHub.SendOrderMessage("Order processed successfully");
        }
    }

还有一个应该记录消息的简单 JavaScript 代码(这是一个非常简化的示例):

@section scripts{
    <script src="~/Scripts/jquery-1.9.1.min.js"></script>
    <script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
    <script src="/signalr/hubs"></script>
    <script language="javascript">
        $(function () {
            var hub = $.connection.orderHub;
            console.log("hub initiated");

            hub.orderMessage = function (msg) {
                console.log(msg);


            };

            $.connection.hub.start();
        });
    </script>

缺少一些东西,因为该函数从未被调用,不是来自 OnConnected,也不是来自静态方法。

console.log("hub initiated");行被打印,并且集线器变量有效,但实际function(msg)从未被调用。

我错过了什么?

标签: c#signalr

解决方案


您缺少“客户”:

hub.client.orderMessage = function (msg) {
            console.log(msg);


        };

推荐阅读