Expansão do SignalR com o SQL Server

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.

Versões de software usadas neste tópico

Versões anteriores deste tópico

Para obter informações sobre versões anteriores do SignalR, consulte Versões mais antigas do SignalR.

Perguntas e comentários

Deixe comentários sobre como você gostou deste tutorial e o que poderíamos melhorar nos comentários na parte inferior da página. Se você tiver perguntas que não estão diretamente relacionadas ao tutorial, poderá postá-las no fórum do ASP.NET SignalR ou StackOverflow.com.

Neste tutorial, você usará SQL Server para distribuir mensagens em um aplicativo SignalR implantado em duas instâncias separadas do IIS. Você também pode executar este tutorial em um único computador de teste, mas para obter o efeito completo, você precisa implantar o aplicativo SignalR em dois ou mais servidores. Você também deve instalar SQL Server em um dos servidores ou em um servidor dedicado separado. Outra opção é executar o tutorial usando VMs no Azure.

Diagrama que mostra as setas indo do Servidor S Q L para o V M para computadores. Uma seta rotulada Update começa na V M e vai para o S Q L Server.

Pré-requisitos

Microsoft SQL Server 2005 ou posterior. O backplane dá suporte a edições de desktop e servidor de SQL Server. Ele não dá suporte ao banco de dados SQL Server Compact Edition ou SQL do Azure. (Se o aplicativo estiver hospedado no Azure, considere o backplane do Barramento de Serviço em vez disso.)

Visão geral

Antes de chegarmos ao tutorial detalhado, aqui está uma visão geral rápida do que você fará.

  1. Crie um novo banco de dados vazio. O backplane criará as tabelas necessárias neste banco de dados.

  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 class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            string sqlConnectionString = "Connecton string to your SQL DB";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }
    

    Esse código configura o backplane com os valores padrão para TableCount e MaxQueueLength. Para obter informações sobre como alterar esses valores, consulte Desempenho do SignalR: Métricas do Scaleout.

Configurar o banco de dados

Decida se o aplicativo usará autenticação do Windows ou SQL Server autenticação para acessar o banco de dados. Independentemente disso, verifique se o usuário do banco de dados tem permissões para fazer logon, criar esquemas e criar tabelas.

Crie um novo banco de dados para o backplane a ser usado. Você pode dar qualquer nome ao banco de dados. Você não precisa criar nenhuma tabela no banco de dados; o backplane criará as tabelas necessárias.

Captura de tela da caixa de diálogo Pesquisador de Objetos. A pasta rotulada Bancos de Dados está selecionada.

Habilitar o Service Broker

É recomendável habilitar o Service Broker para o banco de dados de backplane. O Service Broker fornece suporte nativo para mensagens e enfileiramento em SQL Server, o que permite que o backplane receba atualizações com mais eficiência. (No entanto, o backplane também funciona sem o Service Broker.)

Para marcar se o Service Broker está habilitado, consulte a coluna is_broker_enabled na exibição de catálogo sys.databases.

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Captura de tela de uma janela exibindo a exibição do catálogo de bancos de dados de ponto sys.

Para habilitar o Service Broker, use a seguinte consulta SQL:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Observação

Se essa consulta aparecer como deadlock, verifique se não há aplicativos conectados ao BD.

Se você tiver habilitado o rastreamento, os rastreamentos também mostrarão se o Service Broker está habilitado.

Criar um aplicativo SignalR

Crie um aplicativo SignalR seguindo um destes tutoriais:

Em seguida, modificaremos o aplicativo de chat para dar suporte ao scaleout com SQL Server. Primeiro, adicione o pacote NuGet SignalR.SqlServer ao seu projeto. No Visual Studio, no menu Ferramentas , selecione Gerenciador de Pacotes NuGet e, em seguida, Console do Gerenciador de Pacotes. Na janela Console do Gerenciador de Pacotes, digite o seguinte comando:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Em seguida, abra o arquivo Startup.cs. Adicione o seguinte código ao método Configurar:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

Implantar e executar o aplicativo

Prepare suas instâncias do Windows Server para implantar o aplicativo SignalR.

Adicione a função do IIS. Inclua recursos de "Desenvolvimento de Aplicativos", incluindo o Protocolo WebSocket.

Captura de tela que mostra a caixa de diálogo Assistente para Adicionar Funções e Recursos. As Funções de Servidor e o Protocolo WebSocket estão selecionados.

Inclua também o Serviço de Gerenciamento (listado em "Ferramentas de Gerenciamento").

Captura de tela que mostra a caixa de diálogo Assistente para Adicionar Funções e Recursos. As Funções de Servidor e o Serviço de Gerenciamento são selecionados.

Instale a Implantação da Web 3.0. Ao executar o Gerenciador do IIS, ele solicitará que você instale Microsoft Web Platform ou baixe o instalador. No Instalador de Plataforma, pesquise Implantação na Web e instale a Implantação da Web 3.0

Captura de tela com a implantação da Web 3 ponto 0 selecionada nos resultados da pesquisa.

Verifique se o Serviço de Gerenciamento Web está em execução. Caso contrário, inicie o serviço. (Se você não vir o Serviço de Gerenciamento da Web na lista de serviços do Windows, verifique se instalou o Serviço de Gerenciamento quando adicionou a função do IIS.)

Por fim, abra a porta 8172 para TCP. Essa é a porta que a ferramenta de Implantação da Web usa.

Agora você está pronto para implantar o projeto do Visual Studio do computador de desenvolvimento no servidor. Em Gerenciador de Soluções, clique com o botão direito do mouse na solução e clique em Publicar.

Para obter uma documentação mais detalhada sobre a implantação da Web, consulte Mapa de Conteúdo de Implantação da Web para Visual Studio e ASP.NET.

Se você implantar o aplicativo em dois servidores, poderá abrir cada instância em uma janela separada do navegador e ver que cada um deles recebe mensagens SignalR do outro. (É claro que, em um ambiente de produção, os dois servidores ficavam atrás de um balanceador de carga.)

Captura de tela de duas janelas do navegador abertas mostrando o aplicativo implantado em dois servidores.

Depois de executar o aplicativo, você poderá ver que o SignalR criou tabelas automaticamente no banco de dados:

Captura de tela da caixa de diálogo Pesquisador de Objetos exibindo pastas e arquivos.

O SignalR gerencia as tabelas. Desde que seu aplicativo seja implantado, não exclua linhas, modifique a tabela e assim por diante.