集线器方法在集线器外部不起作用 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
这是控制器方法,它接收 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