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.)

Diagrama que mostra setas de Tópico para Funções web para computadores. Uma seta rotulada publicar começa em Funções da Web e vai para Tópico.

Pré-requisitos:

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á.

  1. Use o windows portal do Azure para criar um novo namespace do Barramento de Serviço.

  2. Adicione estes pacotes NuGet ao seu aplicativo:

  3. Crie um aplicativo SignalR.

  4. 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.

Captura de tela da opção Serviço de Nuvem circulada em vermelho.

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".

Captura de tela da janela intitulada adicionar um novo namespace com opções abaixo.

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.

Captura de tela que mostra a caixa de diálogo Novo Projeto. A nuvem está selecionada na pasta Do Office Share Point. O Serviço de Chat está no campo Nome.

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.

Captura de tela que mostra a caixa de diálogo Novo Serviço de Nuvem do Windows Azure. O Chat do Signal R é digitado acima de Uma Função Web dot NET SP.

Na caixa de diálogo Novo projeto ASP.NET , selecione MVC e clique em OK.

Captura de tela que mostra a caixa de diálogo Novo Projeto DOT NET do A SP. M V C é o modelo selecionado.

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.

Captura de tela que mostra um sinal de adição rotulado Como Criar, uma chave rotulada como Chave de Acesso e uma lixeira rotulada como Excluir.

Copie a cadeia de conexão para a área de transferência e cole-a na variável connectionString .

Captura de tela que mostra a caixa de diálogo Conectar-se à Chave de Acesso ao namespace.

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.

Captura de tela que mostra uma pasta aberta intitulada Funções. O Signal R Chat está selecionado.

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.

Captura de tela que mostra Instâncias. A contagem de instâncias é definida como 2 e o Tamanho do V M é definido como Extra pequeno.

Salve as alterações.

Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto ChatService. Selecione Publicar.

Captura de tela que mostra Gerenciador de Soluções. Publicar está selecionado no menu de contexto do Serviço de Chat.

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.

Captura de tela que mostra a caixa de diálogo Publicar Aplicativo Azure do Windows. Entrar para baixar credenciais é circulado em vermelho.

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.

Captura de tela que mostra a página Configurações de Publicação do Windows Azure.

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".

Captura de tela do menu de navegação com os tópicos selecionados.

Demora alguns minutos para que a atividade da mensagem apareça no dashboard.

Captura de tela que mostra um grafo de atividade de assinatura e mensagem em um linha do tempo.

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.