Поделиться через


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

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

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

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

Версии программного обеспечения, используемые в этом разделе

Предыдущие версии этого раздела

Сведения о более ранних версиях SignalR см. в разделе Старые версии SignalR.

Вопросы и комментарии

Оставьте отзыв о том, как вам понравилось это руководство и что мы могли бы улучшить в комментариях в нижней части страницы. Если у вас есть вопросы, которые не связаны напрямую с руководством, вы можете опубликовать их на форуме ASP.NET SignalR или StackOverflow.com.

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

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

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

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

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

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

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

  2. Добавьте в приложение следующие пакеты NuGet:

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

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

    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();
        }
    }
    

    Этот код настраивает объединителю со значениями по умолчанию для TableCount и MaxQueueLength. Сведения об изменении этих значений см. в разделе Производительность SignalR: метрики масштабирования.

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

Решите, будет ли приложение использовать проверку подлинности проверка подлинности 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]

Снимок экрана: окно с представлением каталога баз данных точек sys.

Чтобы включить Компонент 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

Затем откройте файл Startup.cs. Добавьте приведенный ниже код в конец метода Configure:

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();
    }
}

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

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

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

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

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

Снимок экрана: диалоговое окно мастера добавления ролей и компонентов. Выбраны роли сервера и служба управления.

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

Снимок экрана с выбранным веб-развертыванием 3 точки 0 в результатах поиска.

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

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

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

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

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

Снимок экрана: два открытых окна браузера с приложением, развернутыми на двух серверах.

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

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

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