Масштабирование SignalR с помощью SQL Server (SignalR 1.x)

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

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

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

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

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

Предварительные требования

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

Общие сведения

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

  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 для доступа к базе данных. В любом случае убедитесь, что у пользователя базы данных есть разрешения на вход, создание схем и создание таблиц.

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

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

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

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

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

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.

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

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

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

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

Снимок экрана установщика веб-платформы 4 точки 5 с результатами поиска с выделенным параметром Web Deploy 3 point 0 (Веб-развертывание 3 точки 0).

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

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

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

Более подробную документацию по веб-развертыванию см. в статье Карта содержимого веб-развертывания для Visual Studio и ASP.NET.

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

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

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

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

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