这是控制器方法,它接收应该被踢的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页面上重新连接。
答案 0 :(得分:0)
这有助于我从集线器类之外执行集线器方法。您可以直接从客户端调用hub方法,如下所示:
var myHub = $.coonection.hubName;
myHub.server.myMethod; //name of the method should begin with a small letter