Asp.net-Mvc-4

斷開客戶端與伺服器端信號器的連接

  • May 22, 2021

我將 SignalR 1 與帶有表單身份驗證的 MVC4 C# Web 應用程序一起使用。我的佈局頁面中有一段 JavaScript 程式碼:

$(documnet).ready(function(){
      connect to hub code ...
})

我想斷開使用者與集線器的連接,並在他登錄並驗證成功後再次開始連接。我想從我的帳戶控制器和方法中的伺服器端執行此操作:

public ActionResult LogOn(LoginModel model, string returnUrl)
{
   if (ModelState.IsValid)
   {
       if (System.Web.Security.Membership.ValidateUser(model.UserName, model.Password))
       {
           FormsAuthentication.SetAuthCookie(model.UserName, false);
           ....here , disconnect from hub
           ....to make the user reconnect     
}

我想這樣做的原因是,如果使用者在登錄後更改為經過身份驗證並且連接仍然存在,SignalR 會引發錯誤。錯誤是:

連接 ID 的格式不正確。

您無法從伺服器停止和啟動 SignalR 連接。你需要打電話

$.connection.hub.stop(); //on the client before the user attempts to log on and then call 
$.connection.hub.start(); //after the log on attempt has completed.

您可以按照您的要求做的一種方法是在您的客戶端上編寫一個斷開連接事件,伺服器可以通過 SignalR 呼叫該事件。也許有點像這樣:

myHub.client.serverOrderedDisconnect = function (value) {
   $.connection.hub.stop();
};

然後,在伺服器上,是這樣的:

Clients.Client(Context.ConnectionId).serverOrderedDisconnect();

引用自:https://stackoverflow.com/questions/15889367