У меня есть веб-приложение, которое представляет собой единую установку IIS (это не меняется), но имеет динамический набор поддоменов. У каждого поддомена есть собственные учетные записи пользователей.Изолируйте пользователей в концентраторе signalR по домену
Проблема, с которой я столкнулся, заключается в том, что когда я запускаю signalR на ней, она рассматривает все поддомены как один и тот же домен, поэтому пользователи, у которых только что произошло одно и то же имя пользователя, получат сообщения друг друга.
Это вызывает у меня проблему нарушения безопасности между учетными записями домена.
До сих пор мои лучшие решения для решения этой проблемы имеют разные уровни рисков и проблем.
- Каждый пользователь получает свою собственную группу, создавая имя группы с именем поддомена + имя пользователя.
- Элемент списка уменьшает риск столкновения, но не удаляет его.
- Использование указателя для имени домена и резервирование первых n-символов для указателя снижает риск еще больше, но теперь для каждого пользователя онлайн теперь у меня сформирована группа.
- На старте owin разверните новый центр, представляющий каждый домен.
- Каждый раз, когда я добавляю субдомен, мне придется перезапустить приложение, чтобы добавить новый концентратор. Прямо сейчас, мне не нужно ничего делать, чтобы добавить поддомены, которые DNS поддерживает подстановочный знак, а заголовок хоста в IIS пуст. Все работает, за исключением отсутствия осведомленности о субдоменах в SignalR.
- Создайте собственный класс концентратора, который информирует домен коллекций клиентов, как и все остальные приложения.
- Это, по-видимому, самое чистое, но, безусловно, самое трудоемкое время. Он также представляет наибольший риск ошибок, так как мне придется составлять большую коллекцию тестов QA за пределами тестирования модулей TDD.
- Последняя опция, не используйте SignalR, создайте собственный API длинного опроса.
- Это самый сложный вопрос, поскольку он является самой высокой пропускной способностью и наиболее подверженным процессу. Основной опрос наших целевых пользователей показывает, что они используют браузеры, поддерживающие websocket, поэтому почему мы намеренно увеличиваем пропускную способность или создаем новую задержку.
Чтобы увидеть эту неудачу, просто взять простой чат демо на ASP.NET/SignalR, и запустить его на локальном компьютере под двумя различными браузерами (FF и IE для моих основных тестов), и имеют один вызов http: \ localhost и другой вызов http: \ yourcomputername. Для правильного тестирования вам понадобится IIS, а не IIS Express.
Я закончил отмену этого проекта. По-видимому, только что существующий на сервере концентратор убивал производительность нашего SSRS-зрителя. Хотя я буду читать это, когда у меня будет время. – Brian