Совместное использование соединений между двумя концентраторами SignalR в разных доменах - PullRequest
0 голосов
/ 10 января 2019

В настоящее время у меня есть настроенный веб-сайт чата, который обращается к поддомену, отвечающему за взаимодействие с SignalR:

www.domain1.com > chat.domain1.com

Я хочу представить второй, дублирующий, в значительной степени идентичный сайт, использующий ту же структуру:

www.domain2.com > chat.domain2.com

Оба сайта будут использовать одну и ту же базу данных, в которой хранятся все постоянные связанные с SignalR вещи, такие как соединения, чаты, сообщения чата и т. Д.

Возможно ли взаимодействие обоих поддоменов чата SignalR с клиентами, подключенными к другому поддомену? Хотя общая база данных означает, что постоянные ресурсы являются общими, мне нужно сделать так, чтобы при публикации события на chat.domain1.com клиентах, подключенных к обоим chat.domain1.com и chat.domain2.com получите их.

Похоже, что обычно это делается путем совместного использования одного домена и использования CORS для обработки междоменных взаимодействий, например:

www.domain1.com  
                > chat.domain1.com
www.domain2.com

Я не могу этого сделать, так как конечные точки чата SignalR проходят проверку подлинности с использованием файлов cookie, установленных на основном домене www. Эти файлы cookie не могут совместно использоваться междоменными, и даже если бы они могли, требуется, чтобы пользователь имел возможность одновременно входить в разные учетные записи на domain1.com и domain2.com на одном компьютере.

Итак, есть ли какие-то подходы, которые я могу использовать, чтобы разделить соединения между этими двумя концентраторами? Оба поддоменов чата размещены на одном сервере?

1 Ответ

0 голосов
/ 10 января 2019

Обычно объединительная панель используется, когда ваше приложение масштабируется на нескольких серверах, однако оно также работает в этой ситуации. Я использовал SQL Server для объединительной платы, но есть также пакеты для работы с Redis и Azure Service Bus.


Сначала установите пакет для SQL Server:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Затем настройте объединительную плату:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

Это позволяет SignalR использовать SQL Server для сохранения любых сообщений, которые ему необходимо распространять. При первом запуске он создает несколько таблиц в базе данных, и все готово:

Database created for SignalR backplane

Поскольку оба приложения используют одну и ту же базу данных, это прекрасно работает.

...