Масштабирование SignalR с помощью служебной шины Azure (SignalR 1.x)
Предупреждение
Эта документация не подходит для последней версии SignalR. Ознакомьтесь с ASP.NET Core SignalR.
В этом руководстве вы развернете приложение SignalR в веб-роли Windows Azure, используя служебную шину для распространения сообщений в каждый экземпляр роли.
Предварительные требования:
- Учетная запись Windows Azure.
- Пакет SDK Для Windows Azure.
- Visual Studio 2012.
Служебная шина также совместима со служебной шиной для Windows Server версии 1.1. Однако она несовместима с версией 1.0 служебной шины для Windows Server.
Цены
Служебная шина использует разделы для отправки сообщений. Последние сведения о ценах см. в разделе Служебная шина. На момент написания этой статьи вы можете отправлять 1 000 000 сообщений в месяц менее чем за 1 долл. США. Обратная панель отправляет сообщение служебной шины для каждого вызова метода концентратора SignalR. Существуют также некоторые управляющие сообщения для подключений, отключений, присоединения к группам или выхода из них и т. д. В большинстве приложений большая часть трафика сообщений будет составлять вызовы методов концентратора.
Общие сведения
Прежде чем мы приступим к подробному руководству, ознакомьтесь с кратким обзором того, что вы будете делать.
Используйте портал Azure Windows, чтобы создать новое пространство имен служебной шины.
Добавьте в приложение следующие пакеты NuGet:
Создайте приложение SignalR.
Добавьте следующий код в Global.asax, чтобы настроить объединителю:
protected void Application_Start() { string connectionString = "Service Bus connection string"; GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName"); RouteTable.Routes.MapHubs(); // ... }
Для каждого приложения выберите другое значение "YourAppName". Не используйте одно и то же значение в нескольких приложениях.
Создание служб Azure
Создайте облачную службу, как описано в статье Создание и развертывание облачной службы. Выполните действия, описанные в разделе "Практическое руководство. Создание облачной службы с помощью быстрого создания". Для работы с этим руководством вам не нужно отправлять сертификат.
Создайте новое пространство имен служебной шины, как описано в разделе Использование разделов и подписок служебной шины. Выполните действия, описанные в разделе "Создание пространства имен службы".
Примечание
Обязательно выберите тот же регион для облачной службы и пространства имен служебной шины.
Создание проекта Visual Studio
Запустите Visual Studio. В меню Файл выберите Новый проект.
В диалоговом окне Новый проект разверните узел Visual C#. В разделе Установленные шаблоны выберите Облако , а затем — Облачная служба Windows Azure. Оставьте значение по умолчанию платформа .NET Framework 4.5. Присвойте приложению имя ChatService и нажмите кнопку ОК.
В диалоговом окне Новая облачная служба Windows Azure выберите ASP.NET веб-роль MVC 4. Нажмите кнопку со стрелкой вправо (>), чтобы добавить роль в решение.
Наведите указатель мыши на новую роль, чтобы увидеть значок карандаша. Щелкните этот значок, чтобы переименовать роль. Назовите роль SignalRChat и нажмите кнопку ОК.
В мастере создания проекта ASP.NET MVC 4 выберите Интернет-приложение. Нажмите кнопку ОК. Мастер проектов создает два проекта:
- ChatService. Этот проект является приложением Windows Azure. Он определяет роли Azure и другие параметры конфигурации.
- SignalRChat. Этот проект является ASP.NET проекта MVC 4.
Создание приложения чата SignalR
Чтобы создать приложение чата, выполните действия, описанные в руководстве начало работы с SignalR и MVC 4.
Используйте NuGet для установки необходимых библиотек. В меню Сервис выберите Диспетчер пакетов NuGet, а затем консоль диспетчера пакетов. В окне Консоль диспетчера пакетов введите следующие команды:
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus
-ProjectName
Используйте параметр , чтобы установить пакеты в ASP.NET проекта MVC, а не в проект Windows Azure.
Настройка объединителейной панели
В файле Global.asax приложения добавьте следующий код:
protected void Application_Start()
{
string connectionString = "";
GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");
RouteTable.Routes.MapHubs();
}
Теперь необходимо получить строку подключения к служебной шине. В портал Azure выберите созданное пространство имен служебной шины и щелкните значок Ключ доступа.
Скопируйте строку подключения в буфер обмена, а затем вставьте ее в переменную connectionString .
string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";
Развернуть в Azure
В Обозреватель решений разверните папку Роли в проекте ChatService.
Щелкните правой кнопкой мыши роль SignalRChat и выберите Свойства. Перейдите на вкладку Конфигурация . В разделе Экземпляры выберите 2. Вы также можете задать для размера виртуальной машины значение Слишком маленький.
Сохраните изменения.
В Обозреватель решений щелкните правой кнопкой мыши проект ChatService. Нажмите Публиковать.
Если это ваша первая публикация в Windows Azure, необходимо скачать учетные данные. В мастере публикации щелкните "Войти, чтобы скачать учетные данные". Появится запрос на вход в windows портал Azure и скачивание файла параметров публикации.
Нажмите кнопку Импорт и выберите скачанный файл параметров публикации.
Щелкните Далее. В диалоговом окне Параметры публикации в разделе Облачная служба выберите созданную ранее облачную службу.
Нажмите кнопку Опубликовать. Развертывание приложения и запуск виртуальных машин может занять несколько минут.
Теперь при запуске приложения чата экземпляры роли взаимодействуют через Служебная шина Azure, используя раздел служебной шины. Раздел — это очередь сообщений, которая позволяет нескольким подписчикам.
Объединитедняя панель автоматически создает раздел и подписки. Чтобы просмотреть подписки и действия с сообщениями, откройте портал Azure, выберите пространство имен служебной шины и щелкните "Темы".
Чтобы действие сообщения отображалось на панели мониторинга, потребуется несколько минут.
SignalR управляет временем существования раздела. Пока приложение развернуто, не пытайтесь вручную удалить разделы или изменить параметры раздела.