2013-03-11 5 views
1

У меня есть проект из mvc4 C# бритвенного двигателя. Я добавил последний пакет signalr nuget 1.0.1 В моем проекте используется проверка подлинности. каждый раз, когда клиент идет от входа в выход из системы, и наоборот я получаю сообщение об ошибке на клиенте:signalr Идентификатор соединения находится в неправильном формате

> "NetworkError: 500 Internal Server Error - 
> http://myhost:51090/signalr/abort?transport=serverSentEvents&connectionToken=uIJvYLP3T0GdHaowIlS4uPDA19ukUy7TaW8dcXoPfma4Mr52uoe7PLK9Hh3ip17X_3RbFXx92yEa7nxYVHaCiRAWVE5e05vvpLD0_blb94eUwdkXbmhkRPM2_Z590A64VBF2-eLB_8wCWq-dmkkkbe6EqP6c9YXN3WRF5IyNYkB6Wkom7O1ZoDavQQ0UWvok0" 

и на стороне сервера:

The connection id is in the incorrect format. 

мне нужно сделать, чтобы рассмотреть возможность работы с signalr в по-разному (от https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs), то с аутентификацией?

+0

Вы решили свою проблему, и если да - как? :) –

+0

Да, клиент должен быть отключен перед выполнением FormAuthentication.SignOut необходимо вызвать с клиентской стороны hub.stop() –

ответ

1

Кажется, что вы выходите из системы (изменяя своего пользователя), когда у вас есть активное соединение SignalR.

Причина, по которой это происходит, заключается в том, что по запросу прерывания на сервере мы проверяем, связано ли connectionId с правильным пользователем. Поэтому при выходе из системы, пока соединение по-прежнему активно, вы теряете связь с пользователем и вызывают ошибку.

Чтобы исправить это, остановите соединение SignalR перед выходом из системы.

+1

Можете ли вы поделиться образцом кода, который показывает, как мы можем остановить все соединения signalr для данного пользователя? – Dennis

+0

Это был бы довольно сложный фрагмент кода. По существу вам необходимо отслеживать все связанные с пользователем ConnectionId, а затем создавать метод клиентской стороны, который отключает клиент. Когда у вас есть эти две части, всякий раз, когда вы хотите остановить все подключения для пользователя, вы просто вызываете клиентскую функцию, чтобы остановить соединения для всех связанных с пользователем ConnectionId. –

+0

Как это можно обрабатывать или переносить, когда клиент не имеет контроля над тем, когда он может быть выведен из системы? Например, токен sso, срок действия которого истек или был недействительным, поскольку одни и те же учетные данные использовались где-то еще? Я говорю только о клиенте JS. В конце концов клиент будет отправлен в sso, потому что токен недействителен, но даже тогда я считаю, что запрос прерывания вызывает это исключение. Насколько мне известно, HubPipelineModule.OnIncomingError никогда не вызывает этого. –

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