Expansão do SignalR com o Barramento de Serviço do Azure
por Patrick Fletcher
Aviso
Esta documentação não é para a versão mais recente do SignalR. Dê uma olhada em ASP.NET Core SignalR.
Neste tutorial, você implantará um aplicativo SignalR em uma Função Web do Windows Azure, usando o backplane do Barramento de Serviço para distribuir mensagens para cada instância de função. (Você também pode usar o backplane do Barramento de Serviço com aplicativos Web no Serviço de Aplicativo do Azure.)
Pré-requisitos:
- Uma conta do Windows Azure.
- O SDK do Windows Azure.
- Visual Studio 2012 ou 2013.
O backplane do barramento de serviço também é compatível com o Barramento de Serviço para Windows Server, versão 1.1. No entanto, ele não é compatível com a versão 1.0 do Barramento de Serviço para Windows Server.
Preços
O backplane do Barramento de Serviço usa tópicos para enviar mensagens. Para obter as informações de preços mais recentes, consulte Barramento de Serviço. No momento desta gravação, você pode enviar 1.000.000 mensagens por mês por menos de US$ 1. O plano de fundo envia uma mensagem de barramento de serviço para cada invocação de um método do hub SignalR. Também há algumas mensagens de controle para conexões, desconexões, junção ou saída de grupos e assim por diante. Na maioria dos aplicativos, a maioria do tráfego de mensagens serão invocações de método de hub.
Visão geral
Antes de chegarmos ao tutorial detalhado, aqui está uma visão geral rápida do que você fará.
Use o windows portal do Azure para criar um novo namespace do Barramento de Serviço.
Adicione estes pacotes NuGet ao seu aplicativo:
Crie um aplicativo SignalR.
Adicione o seguinte código a Startup.cs para configurar o backplane:
public void Configuration(IAppBuilder app) { string connectionString = "Service Bus connection string"; GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName"); app.MapSignalR(); // ... }
Esse código configura o backplane com os valores padrão para TopicCount e MaxQueueLength. Para obter informações sobre como alterar esses valores, consulte Desempenho do SignalR: Métricas do Scaleout.
Para cada aplicativo, escolha um valor diferente para "YourAppName". Não use o mesmo valor em vários aplicativos.
Criar os serviços do Azure
Crie um Serviço de Nuvem, conforme descrito em Como criar e implantar um serviço de nuvem. Siga as etapas na seção "Como criar um serviço de nuvem usando a Criação Rápida". Para este tutorial, você não precisa carregar um certificado.
Crie um novo namespace do Barramento de Serviço, conforme descrito em Como usar tópicos/assinaturas do Barramento de Serviço. Siga as etapas na seção "Criar um namespace de serviço".
Observação
Selecione a mesma região para o serviço de nuvem e o namespace do Barramento de Serviço.
Criar o Projeto do Visual Studio
Inicie o Visual Studio. No menu Arquivo, clique em Novo Projeto.
Na caixa de diálogo Novo Projeto , expanda Visual C#. Em Modelos Instalados, selecione Nuvem e, em seguida, selecione Serviço de Nuvem do Windows Azure. Mantenha o padrão .NET Framework 4.5. Nomeie o aplicativo ChatService e clique em OK.
Na caixa de diálogo Novo Serviço de Nuvem do Windows Azure , selecione ASP.NET Função Web. Clique no botão de seta para a direita (>) para adicionar a função à sua solução.
Passe o mouse sobre a nova função para que o ícone de lápis fique visível. Clique neste ícone para renomear a função. Nomeie a função "SignalRChat" e clique em OK.
Na caixa de diálogo Novo projeto ASP.NET , selecione MVC e clique em OK.
O assistente de projeto cria dois projetos:
- ChatService: este projeto é o aplicativo do Windows Azure. Ele define as funções do Azure e outras opções de configuração.
- SignalRChat: este projeto é seu projeto ASP.NET MVC 5.
Criar o aplicativo de chat do SignalR
Para criar o aplicativo de chat, siga as etapas no tutorial Introdução com o SignalR e o MVC 5.
Use o NuGet para instalar as bibliotecas necessárias. No menu Ferramentas , selecione Gerenciador de Pacotes NuGet e, em seguida, Selecione Console do Gerenciador de Pacotes. Na janela Console do Gerenciador de Pacotes , insira os seguintes comandos:
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus
Use a opção -ProjectName
para instalar os pacotes no projeto ASP.NET MVC, em vez do projeto do Windows Azure.
Configurar o backplane
No arquivo Startup.cs do aplicativo, adicione o seguinte código:
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();
}
Agora você precisa obter a cadeia de conexão do barramento de serviço. No portal do Azure, selecione o namespace do barramento de serviço que você criou e clique no ícone Chave de Acesso.
Copie a cadeia de conexão para a área de transferência e cole-a na variável connectionString .
string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";
Implantar no Azure
Em Gerenciador de Soluções, expanda a pasta Funções dentro do projeto ChatService.
Clique com o botão direito do mouse na função SignalRChat e selecione Propriedades. Selecione a guia Configuração . Em Instâncias , selecione 2. Você também pode definir o tamanho da VM como Extra Small.
Salve as alterações.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto ChatService. Selecione Publicar.
Se essa for sua primeira vez publicando no Windows Azure, você deverá baixar suas credenciais. No assistente Publicar , clique em "Entrar para baixar credenciais". Isso solicitará que você entre no Windows portal do Azure e baixe um arquivo de configurações de publicação.
Clique em Importar e selecione o arquivo de configurações de publicação que você baixou.
Clique em Avançar. Na caixa de diálogo Publicar Configurações , em Serviço de Nuvem, selecione o serviço de nuvem que você criou anteriormente.
Clique em Publicar. Pode levar alguns minutos para implantar o aplicativo e iniciar as VMs.
Agora, quando você executa o aplicativo de chat, as instâncias de função se comunicam por meio de Barramento de Serviço do Azure, usando um tópico do Barramento de Serviço. Um tópico é uma fila de mensagens que permite vários assinantes.
O backplane cria automaticamente o tópico e as assinaturas. Para ver as assinaturas e a atividade de mensagem, abra o portal do Azure, selecione o namespace do Barramento de Serviço e clique em "Tópicos".
Demora alguns minutos para que a atividade da mensagem apareça no dashboard.
O SignalR gerencia o tempo de vida do tópico. Desde que seu aplicativo seja implantado, não tente excluir manualmente tópicos ou alterar as configurações no tópico.
Solução de problemas
System.InvalidOperationException "O único IsolationLevel com suporte é 'IsolationLevel.Serializable'."
Esse erro poderá ocorrer se o nível de transação de uma operação estiver definido como algo diferente de Serializable
. Verifique se nenhuma operação está sendo executada com outros níveis de transação.