2013-05-10 2 views
4

Недавно я начал использовать библиотеку Signal R в приложении ASP.Net MVC 3. Я могу использовать Signal R для отправки сообщения клиенту. Но я заметил, что если я войду в приложение из другого браузера, я получаю следующую ошибку:signalr InvalidOperationException

Тип исключения: InvalidOperationException Сообщение об исключении: непризнанная идентификация пользователя. Идентификатор пользователя не может меняться во время активного соединения SignalR.

сервера трассировки стека: в Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId (контекст HostContext, строка connectionToken) в Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest (контекст HostContext) в Microsoft.AspNet.SignalR.Owin .CallHandler.Invoke (IDictionary 2 environment) at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary 2 окружающая среда) на Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute() в Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest (HttpContextBase HttpContext, AsyncCallback обратного вызова, объект ExtraData)

И в некоторых случаях я неоднократно получал эту ошибку. И журнал событий заполняется через пару минут. Я переопределяю OnConnect, функции OnDisconnect в моем классе хаба и инициировал соединение хаба из сценария Java.

ответ

3

SignalR не позволяет изменятьпользователя при сохранении соединения. Это связано с тем, что соединение SignalRToken действует как токен анти-xsrf.

Похоже, что ваш «другой» браузер должен быть просто другим окном браузера. Когда вы входите в приложение в другом окне, он изменяет ваш cookie проверки подлинности форм ASP.NET (и, следовательно, ваш Identity) в обоих окнах браузера.

Любые текущие соединения SignalR будут работать в вышеупомянутом InvalidOperationException, когда они попытаются повторно подключиться после изменения файла cookie браузера. SignalR может попытаться повторно подключиться довольно часто, если используется длинный опрос. Как только воссоздание завершится неудачно из-за исключения, SignalR будет пытаться повторно подключиться примерно на 40 seconds, после чего SignalR откажется и отключится.

+1

Любые советы по наилучшему способу решить эту проблему, чтобы соединение было восстановлено в старом окне, но с новым идентификатором? – chrisb

+0

После изменения личности пользователя вы должны вручную остановить и перезапустить соединение signalr. – halter73

Смежные вопросы