Масштабирование 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 Server к V M и к компьютерам. Одна стрелка с меткой Update начинается на V M и идет к S Q L Server.

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

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

Обзор

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

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

Создайте новую базу данных для использования бекплейном. Вы можете указать любое имя базы данных. Вам не нужно создавать таблицы в базе данных; 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]

Снимок экрана окна, отображающего каталожное представление sys.databases.

Чтобы включить 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.

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

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

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

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

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

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

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

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

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

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

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

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

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