集线器方法在集线器外部不起作用 class

Hub method doesn't work from outside the hub class

这是控制器方法,它接收 userName 应该被踢。

   public ActionResult Kick(string userName)
    {
        var hub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();            
        var user = userService.GetUserByName(userName);
        hub.Clients.Client(user.ConnectionIdInHub).kickUser();
        return Json(new { success = true});
    }

kickUser() - 这是一个 JS 方法。但是当从控制器方法 Kick() 执行 kickUser() 时,客户端没有任何反应。

 chatHub.client.kickUser = function () {
        window.location.replace(window.kickUserActionUrl);
    }

我应该怎么做才能解决这个问题?

我试过这样做:

public static void OnKicked(string connectionId)
        {
            var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            hubContext.Clients.Client(connectionId).closeConnection();
        }

我这样调用集线器方法ChatHub.OnKicked(user.ConnectionIdInHub); 但还是不行

另一种解决方法:

我正在调用客户端 setInterval() 方法,该方法每十秒向服务器发送一次请求。 JSon 方法通过在服务器上接收此请求来检查一件事:当前用户是 IsKicked=true,在这种情况下 JSon 将发回 new {success=true} 并且用户将重新连接在启动页面上。

这帮助我从集线器外部执行集线器方法 class。您可以像这样从客户端直接调用集线器方法:

var myHub = $.coonection.hubName;
myHub.server.myMethod; //name of the method should begin with a small letter