Hub方法不适用于hub类之外

时间:2017-03-07 10:40:44

标签: javascript jquery asp.net asp.net-mvc signalr

这是控制器方法,它接收应该被踢的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方法。但是当从控制器方法kickUser()执行Kick()时,客户端没有发生任何事情。

 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();
        }

我这样调用hub方法ChatHub.OnKicked(user.ConnectionIdInHub); 但它仍然无效

以下是另一种解决方法:

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

1 个答案:

答案 0 :(得分:0)

这有助于我从集线器类之外执行集线器方法。您可以直接从客户端调用hub方法,如下所示:

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