Я пытаюсь ввести IPrincipal
в мои конструкторы концентратора SignalR. Я уже видел и пробовал решение от «Selective IPrincipal Injection via StructureMap with SignalR», но, к сожалению, это больше не работает для SignalR 2.x.Inject IPrincipal с SignalR
В моей отладке я обнаружил, что иногда, мой конструктор хаба вызывается с моим промежуточным программным обеспечением OWIN в стеке. Если это так, Thread.CurrentPrincipal
- правильное значение. Дополнительно (и удивительно) HttpContext.Current
также не является нулевым. Я был под впечатлением, что это всегда было нулевым в SignalR, и я не пытаюсь его использовать, но я просто наблюдаю. Похоже, что эти вызовы работают из конвейера в стеке вызовов.
Другие вызовы, похоже, происходят из пула потоков. В этих случаях Thread.CurrentPrincipal
является GenericPrincipal
, HttpContext.Current
является нулевым (опять-таки просто наблюдением), и я не могу, по-видимому, получить стратегическое значение. Тем не менее, внутри хаба, this.Context.User
имущество делает имеют право принципала.
Как еще я могу получить главный статически, чтобы я мог ввести его в конструктор хаба?
Чтобы решить эту проблему, я сделал WebAPI: пользователи могут присоединиться к группам или отправлять сообщения с помощью моего API. В этом API я могу проверить личность/роли. – Guillaume
@Guillaume Как это решить SignalR? –
Это не решит вашу проблему, поэтому я не опубликовал ответ. Это wrokaround, чтобы получить IPrincipal для всех входящих действий от пользователей.Контроллер действует как прокси-сервер между клиентом и концентратором. Наверное, не очень хорошо для реального времени (игры, ...). – Guillaume