2
以下是控制器方法,接收應該踢的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()
方法,每10秒發送一次服務器請求。通過在服務器上接收此請求的JSon方法檢查一件事:是當前用戶IsKicked=true
,在這種情況下,JSon將發送回new {success=true}
,並且用戶將在該Kick Page上重新連接。
你在客戶端包含哪些SignalR腳本?只是想驗證你是否包含生成的代理和必要的支持腳本。 –
@RobReagan 你的意思是? ' ' –
這是正確的。謝謝。 –