Масштабирование SignalR с помощью служебной шины Azure
Предупреждение
Эта документация не для последней версии SignalR. Взгляните на ASP.NET Core SignalR.
В этом руководстве вы развернете приложение SignalR в веб-роли Windows Azure, используя служебную шину для распространения сообщений между каждым экземпляром роли. (Вы также можете использовать служебную шину с веб-приложениями в Служба приложений Azure.)
Предварительные требования:
- Учетная запись Windows Azure.
- Пакет SDK для Windows Azure.
- Visual Studio 2012 или 2013.
Служебная шина также совместима со служебной шиной для Windows Server версии 1.1. Однако она несовместима с версией 1.0 служебной шины для Windows Server.
Цены
В объединителе служебной шины для отправки сообщений используются разделы. Последние сведения о ценах см. в разделе Служебная шина. На момент написания этой статьи вы можете отправлять 1 000 000 сообщений в месяц менее чем за 1 долл. США. Серверная панель отправляет сообщение служебной шины для каждого вызова метода концентратора SignalR. Существуют также некоторые управляющие сообщения для подключений, отключений, присоединения к группам или выхода из них и т. д. В большинстве приложений большую часть трафика сообщений будут вызовы методов концентратора.
Общие сведения
Прежде чем мы приступим к подробному руководству, ознакомьтесь с кратким обзором действий.
Используйте портал Azure Windows для создания пространства имен служебной шины.
Добавьте в приложение следующие пакеты NuGet:
Создайте приложение SignalR.
Добавьте следующий код в файл 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 и нажмите кнопку ОК.
Мастер проектов создает два проекта:
- 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.
Сохраните изменения.
В Обозреватель решений щелкните правой кнопкой мыши проект ChatService. Нажмите Публиковать.
Если вы впервые публикуете в Windows Azure, необходимо скачать учетные данные. В мастере публикации щелкните "Войти, чтобы скачать учетные данные". Вам будет предложено войти в портал Azure Windows и скачать файл параметров публикации.
Щелкните Импорт и выберите скачанный файл параметров публикации.
Щелкните Далее. В диалоговом окне Параметры публикации в разделе Облачная служба выберите созданную ранее облачную службу.
Нажмите кнопку Опубликовать. Развертывание приложения и запуск виртуальных машин может занять несколько минут.
Теперь при запуске приложения чата экземпляры роли взаимодействуют через Служебная шина Azure, используя раздел служебной шины. Раздел — это очередь сообщений, которая позволяет нескольким подписчикам.
Объединитедняя панель автоматически создает раздел и подписки. Чтобы просмотреть подписки и действия с сообщениями, откройте портал Azure, выберите пространство имен служебной шины и щелкните "Темы".
Чтобы действие сообщения отображалось на панели мониторинга, потребуется несколько минут.
SignalR управляет временем существования раздела. Пока приложение развернуто, не пытайтесь вручную удалить разделы или изменить параметры раздела.
Устранение неполадок
System.InvalidOperationException "Единственным поддерживаемым классом IsolationLevel является IsolationLevel.Serializable".
Эта ошибка может возникнуть, если уровень транзакции для операции имеет значение, отличное Serializable
от . Убедитесь, что операции не выполняются с другими уровнями транзакций.