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
- Visual Studio 2013
- .NET 4.5
- SignalR versão 2
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.
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á.
Crie um novo banco de dados vazio. O backplane criará as tabelas necessárias neste banco de dados.
Adicione estes pacotes NuGet ao seu aplicativo:
Crie um aplicativo SignalR.
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.
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]
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.
Inclua também o Serviço de Gerenciamento (listado em "Ferramentas de Gerenciamento").
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
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.)
Depois de executar o aplicativo, você poderá ver que o SignalR criou tabelas automaticamente no banco de dados:
O SignalR gerencia as tabelas. Desde que seu aplicativo seja implantado, não exclua linhas, modifique a tabela e assim por diante.