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


Масштабирование SignalR с помощью служебной шины Azure

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

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

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

В этом руководстве вы развернете приложение SignalR в веб-роли Windows Azure, используя служебную шину для распространения сообщений между каждым экземпляром роли. (Вы также можете использовать служебную шину с веб-приложениями в Служба приложений Azure.)

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

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

Служебная шина также совместима со служебной шиной для Windows Server версии 1.1. Однако она несовместима с версией 1.0 служебной шины для Windows Server.

Цены

В объединителе служебной шины для отправки сообщений используются разделы. Последние сведения о ценах см. в разделе Служебная шина. На момент написания этой статьи вы можете отправлять 1 000 000 сообщений в месяц менее чем за 1 долл. США. Серверная панель отправляет сообщение служебной шины для каждого вызова метода концентратора SignalR. Существуют также некоторые управляющие сообщения для подключений, отключений, присоединения к группам или выхода из них и т. д. В большинстве приложений большую часть трафика сообщений будут вызовы методов концентратора.

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

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

  1. Используйте портал Azure Windows для создания пространства имен служебной шины.

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

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

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

    public void Configuration(IAppBuilder app)
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        app.MapSignalR();
        // ...
    }
    

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

Для каждого приложения выберите другое значение "YourAppName". Не используйте одно и то же значение в нескольких приложениях.

Создание служб Azure

Создайте облачную службу, как описано в разделе Создание и развертывание облачной службы. Выполните действия, описанные в разделе "Практическое руководство. Создание облачной службы с помощью быстрого создания". В этом руководстве не нужно отправлять сертификат.

Снимок экрана: параметр

Создайте новое пространство имен служебной шины, как описано в разделе Использование разделов и подписок служебной шины. Выполните действия, описанные в разделе "Создание пространства имен службы".

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

Примечание

Обязательно выберите тот же регион для облачной службы и пространства имен служебной шины.

Создание проекта Visual Studio

Запустите Visual Studio. В меню Файл выберите Новый проект.

В диалоговом окне Новый проект разверните узел Visual C#. В разделе Установленные шаблоны выберите Облако , а затем — Облачная служба Windows Azure. Оставьте платформа .NET Framework по умолчанию 4.5. Назовите приложение ChatService и нажмите кнопку ОК.

Снимок экрана: диалоговое окно

В диалоговом окне Новая облачная служба Windows Azure выберите ASP.NET веб-роль. Нажмите кнопку со стрелкой вправо (>), чтобы добавить роль в решение.

Наведите указатель мыши на новую роль, чтобы увидеть значок карандаша. Щелкните этот значок, чтобы переименовать роль. Назовите роль SignalRChat и нажмите кнопку ОК.

Снимок экрана: диалоговое окно

В диалоговом окне Создать проект ASP.NET выберите MVC и нажмите кнопку ОК.

Снимок экрана, на котором показано диалоговое окно New A S P dot NET Project (Проект NET) M V C является выбранным шаблоном.

Мастер проектов создает два проекта:

  • ChatService: этот проект является приложением Windows Azure. Он определяет роли Azure и другие параметры конфигурации.
  • SignalRChat: этот проект является ASP.NET проекта MVC 5.

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

Чтобы создать приложение чата, выполните действия, описанные в руководстве начало работы с SignalR и MVC 5.

Используйте NuGet для установки необходимых библиотек. В меню Сервис выберите Диспетчер пакетов NuGet, а затем — Консоль диспетчера пакетов. В окне Консоль диспетчера пакетов введите следующие команды:

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

-ProjectName Используйте параметр для установки пакетов в проект MVC ASP.NET, а не в проект Windows Azure.

Настройка задней панели

В файле Startup.cs приложения добавьте следующий код:

public void Configuration(IAppBuilder app)
{
    // Any connection or hub wire up and configuration should go here
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    app.MapSignalR();
}

Теперь необходимо получить строку подключения служебной шины. В портал Azure выберите созданное пространство имен служебной шины и щелкните значок Ключа доступа.

Снимок экрана: знак

Скопируйте строку подключения в буфер обмена, а затем вставьте ее в переменную connectionString .

Снимок экрана: диалоговое окно

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Развернуть в Azure

В Обозреватель решений разверните папку Роли в проекте ChatService.

Снимок экрана: открытая папка с названием

Щелкните правой кнопкой мыши роль SignalRChat и выберите Свойства. Перейдите на вкладку Конфигурация . В разделе Экземпляры выберите 2. Вы также можете задать для размера виртуальной машины значение Extra Small.

Снимок экрана: экземпляры. Для параметра Количество экземпляров задано значение 2, а для параметра Размер V M — значение Очень мало.

Сохраните изменения.

В Обозреватель решений щелкните правой кнопкой мыши проект ChatService. Нажмите Публиковать.

Снимок экрана: Обозреватель решений. Выберите Опубликовать в контекстном меню Службы чата.

Если вы впервые публикуете в Windows Azure, необходимо скачать учетные данные. В мастере публикации щелкните "Войти, чтобы скачать учетные данные". Вам будет предложено войти в портал Azure Windows и скачать файл параметров публикации.

Снимок экрана: диалоговое окно

Щелкните Импорт и выберите скачанный файл параметров публикации.

Щелкните Далее. В диалоговом окне Параметры публикации в разделе Облачная служба выберите созданную ранее облачную службу.

Снимок экрана: страница параметров публикации Windows Azure.

Нажмите кнопку Опубликовать. Развертывание приложения и запуск виртуальных машин может занять несколько минут.

Теперь при запуске приложения чата экземпляры роли взаимодействуют через Служебная шина Azure, используя раздел служебной шины. Раздел — это очередь сообщений, которая позволяет нескольким подписчикам.

Объединитедняя панель автоматически создает раздел и подписки. Чтобы просмотреть подписки и действия с сообщениями, откройте портал Azure, выберите пространство имен служебной шины и щелкните "Темы".

Снимок экрана: меню навигации с выбранными разделами.

Чтобы действие сообщения отображалось на панели мониторинга, потребуется несколько минут.

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

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

Устранение неполадок

System.InvalidOperationException "Единственным поддерживаемым классом IsolationLevel является IsolationLevel.Serializable".

Эта ошибка может возникнуть, если уровень транзакции для операции имеет значение, отличное Serializableот . Убедитесь, что операции не выполняются с другими уровнями транзакций.