【问题标题】:SignalR working with groups is not working correctlySignalR 与组一起工作无法正常工作
【发布时间】:2017-08-18 11:08:25
【问题描述】:

我与 signalR 合作。组功能无法正常工作。

这里是我的中心:

public class BasketHub : Hub
{
    public void Login(int companyId)
    {
        string groupName = "company" + companyId;

        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BasketHub>();

        context.Groups.Add(Context.ConnectionId, groupName);
    }

    public void Logout(int companyId)
    {
        string groupName = "company" + companyId;

        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BasketHub>();

        context.Groups.Remove(Context.ConnectionId, groupName);
    }
}

这里是使用服务器端:

  public void OrderConfirm(OrderConfirmModel orderConfirmModel)
  {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BasketHub>();

        var groupName = "company" + orderConfirmModel.CompanyId;

        context.Clients.Group(groupName).orderConfirm(orderConfirmModel.DidNewOrder);

        context.Clients.Group(groupName).newOrderCount(orderConfirmModel.DidNewOrder);

        context.Clients.Group(groupName).didGetNotification(orderConfirmModel.BasketId);
  }

这里是客户:

       $(function () {
        var basketHub = $.connection.basketHub;

        basketHub.client.newOrderCount = function (isNewOrder) {
            // some code
        }

        basketHub.client.didGetNotification = function (basketId) {
            // some code
        }

        basketHub.client.orderConfirm = function (isNewOrder) {
             // some code
        }

        $.connection.hub.start();
    });

这里是组添加和删除客户端:

    $(function () {
    var basketHub = $.connection.basketHub;

    $.connection.hub.start().done(function () {
        basketHub.server.login($scope.Company.Id);

        $('#logoutBtn').click(function () {
            basketHub.server.logout($scope.Company.Id);
        });
    });

    $(window).bind('beforeunload', function (e) {
        basketHub.server.logout($scope.Company.Id);
    });
});

我在 BasketHub 的上下文中创建了该组。但是,当我尝试使用该组时,我没有到达它。并且客户端没有触发通知。

我可以像下面这样使用它:

context.Clients.All.orderConfirm(orderConfirmModel.DidNewOrder);
context.Clients.All.newOrderCount(orderConfirmModel.DidNewOrder);
context.Clients.All.didGetNotification(orderConfirmModel.BasketId);

最好的问候。

【问题讨论】:

  • 您能否确认在调试时您能够看到登录发生时,将 connectionId 添加到带有 companyId 的组中,并且在 OrderConfirm 方法中,您获得了相同的 companyId?此外,OrderConfirm 方法是否位于 Hub 或另一个 MVC 或 API 控制器中?
  • 是的,相同的 companyId。已确认。

标签: javascript c# signalr signalr-hub signalr-2


【解决方案1】:

我找到了解决方案。编写一个角度控制器,在每次页面加载时运行 init(如布局控制器)。我在这里定义我的集线器并发出函数。 SingnalR 组工作正常。

    $(function () {
    var basketHub = $.connection.basketHub;

    basketHub.client.orderConfirm = function (isNewOrder) {
        $rootScope.$emit("basketOrderConfirm", isNewOrder);
    }

    basketHub.client.newOrderCount = function (isNewOrder) {
        $rootScope.$emit("newOrderCount", isNewOrder);
    }

    basketHub.client.didGetNotification = function (basketId) {
        $rootScope.$emit("didGetNotification", basketId);
    }

    $.connection.hub.start().done(function () {
        basketHub.server.login($scope.Company.Id);

        $('#logoutBtn').click(function () {
            basketHub.server.logout($scope.Company.Id);
        });
    });

    $(window).bind('beforeunload', function (e) {
        basketHub.server.logout($scope.Company.Id);
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2020-08-19
    • 2013-02-06
    • 2019-02-02
    • 2021-10-15
    • 2016-07-05
    相关资源
    最近更新 更多