Масштабирование SignalR с ПОМОЩЬЮ SQL Server (SignalR 1.x)

Патрик Флетчер

Предупреждение

Эта документация не подходит для последней версии SignalR. Взгляните на ASP.NET Core SignalR.

В этом руководстве вы будете использовать SQL Server для распространения сообщений в приложении SignalR, развернутом в двух отдельных экземплярах IIS. Вы также можете запустить это руководство на одном тестовом компьютере, но чтобы получить полный эффект, необходимо развернуть приложение SignalR на двух или более серверах. Необходимо также установить SQL Server на одном из серверов или на отдельном выделенном сервере. Другим вариантом является запуск руководства с помощью виртуальных машин в Azure.

Схема сервера S Q L и его связи между V Ms, компьютерами, отправкой запросов и обновлениями сервера S Q L.

Необходимые условия

Microsoft SQL Server 2005 или более поздней версии. Подложка поддерживает как настольные, так и серверные издания SQL Server. Она не поддерживает SQL Server Compact Edition или Базу данных SQL Azure. (Если ваше приложение размещено в Azure, рассмотрите использование посредника Service Bus.)

Обзор

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

  1. Создайте пустую базу данных. Серверная планка создаст необходимые таблицы в этой базе данных.

  2. Добавьте эти пакеты NuGet в приложение:

  3. Создайте приложение SignalR.

  4. Добавьте следующий код в Global.asax, чтобы сконфигурировать бекплейн:

    protected void Application_Start()
    {
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Настройка базы данных

Определите, будет ли приложение использовать проверку подлинности Windows или проверку подлинности SQL Server для доступа к базе данных. Независимо от того, убедитесь, что пользователь базы данных имеет разрешения на вход, создание схем и создание таблиц.

Создайте новую базу данных для использования бекплейном. Вы можете указать любое имя базы данных. Вам не нужно создавать таблицы в базе данных; Backplane создаст необходимые таблицы.

Снимок экрана окна Обозревателя объектов с выделенной папкой

Включение компонента Service Broker

Рекомендуется включить Service Broker для базы данных серверной части. Service Broker обеспечивает встроенную поддержку обмена сообщениями и очередей в SQL Server, что позволяет серверной части получать обновления более эффективно. (Однако обратная планка также работает без Компонента Service Broker.)

Чтобы проверить, включен ли Компонент Service Broker, запросите столбец is_broker_enabled в представлении каталога sys.database .

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Снимок экрана вкладки S Q L Query 1 dot S Q L, отображаемой в компоненте Service Broker, на которой отображаются вкладки

Чтобы включить Service Broker, используйте следующий SQL-запрос:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Замечание

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

Если вы включили трассировку, трассировки также покажут, включен ли Service Broker.

Создание приложения SignalR

Создайте приложение SignalR, выполнив одно из следующих руководств:

Затем мы изменим приложение чата для поддержки масштабирования с помощью SQL Server. Сначала добавьте пакет NuGet SignalR.SqlServer в проект. В Visual Studio в меню "Сервис" выберите диспетчер пакетов NuGet, а затем консоль диспетчера пакетов. В окне консоли диспетчера пакетов введите следующую команду:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Затем откройте файл Global.asax. Добавьте следующий код в метод Application_Start :

protected void Application_Start()
{
    string sqlConnectionString = "<add your SQL connection string here>";
    GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);

    RouteTable.Routes.MapHubs();
}

Развертывание и запуск приложения

Подготовьте экземпляры Windows Server для развертывания приложения SignalR.

Добавьте роль IIS. Включите функции "Разработка приложений", включая протокол WebSocket.

Снимок экрана мастера добавления ролей и функций с выделенными параметрами ролей сервера и протокола веб-сокета.

Также включите службу управления (указанную в разделе "Средства управления").

Снимок экрана Мастера добавления ролей и компонентов с выделенными параметрами

Установите Web Deploy 3.0. При запуске диспетчера IIS появится запрос на установку Microsoft Web Platform или вы можете скачать установщик. В Установщике платформы найдите Web Deploy и установите Web Deploy 3.0.

Снимок экрана установщика веб-платформы версии 4.5, отображающий результаты поиска с выделенной опцией

Убедитесь, что служба веб-управления запущена. Если это не так, запустите службу. (Если вы не видите веб-службу управления в списке служб Windows, убедитесь, что вы установили службу управления при добавлении роли IIS.)

Наконец, откройте порт 8172 для TCP. Это порт, используемый средством веб-развертывания.

Теперь вы готовы развернуть проект Visual Studio с компьютера разработки на сервере. В обозревателе решений щелкните правой кнопкой мыши решение и нажмите кнопку "Опубликовать".

Дополнительные сведения о веб-развертывании см. в статье "Карта содержимого веб-развертывания" для Visual Studio и ASP.NET.

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

Снимок экрана: окно браузера Internet Explorer с экраном индекса, в котором отображаются сообщения Signal R.

После запуска приложения вы увидите, что SignalR автоматически создал таблицы в базе данных:

Снимок экрана: экран обозревателя объектов с выделенным сервером MIKE dash S Q L и отображением содержащихся папок и серверов.

SignalR управляет таблицами. Пока приложение развернуто, не удаляйте строки, изменяйте таблицу и т. д.