Estou configurando a comunicação do Service Broker entre 2 servidores, A e B, vamos chamá-los. Usei este artigo como exemplo.
A é SQL 2005, B é SQL 2012. Não funciona e não consegui encontrar um bom motivo para isso. O que posso ver é:
O Profiler na extremidade receptora nem mesmo mostra nenhum evento do Service Broker, indicando que nada está chegando até ele.
Mas usando ssbdiagnose conforme abaixo, ele diz parabéns, você não tem erros:
C:\Users\me>ssbdiagnose -level info -E configuration from service ServerAServiceTest -S ServerA -d MyDB to Service ServerBServiceTest -S ServerB -d MyDB on Contract myContract
Microsoft SQL Server 11.0.2100.60
Service Broker Diagnostic Utility
0 Errors, 0 Warnings
Também na fila de transmissão, a única coisa que vejo que parece particularmente desligada é 'to_broker_instance' é nulo, embora eu tenha especificado explicitamente essa informação ao configurar a rota.
Além disso, nenhum erro está aparecendo emmission_status.
Além disso, os logs de erro do SQL Server não estão esclarecendo nada.
Quanto aos problemas de firewall, bem, esses são servidores de teste não acessíveis de fora, então tentei desligar os firewalls completamente.
Uma coisa que é incômoda, vou pegar isso:
Ocorreu uma exceção ao enfileirar uma mensagem na fila de destino. Erro: 15581 Estado: 7. Crie uma chave mestra no banco de dados ou abra a chave mestra na sessão antes de executar esta operação.
Eu abro a chave e eles vão embora. Mas eu não deveria ter que abrir repetidamente a chave toda vez que quero fazer algo, deveria? Suspeito que isso seja parte do problema, embora, como mencionado, os erros desapareçam.
Desculpe pela pergunta um tanto aberta - até mesmo alguma ajuda para identificar onde obter erros mais informativos ou informações de depuração seria ótima. Este é um território novo para mim.
A chave mestra do banco de dados está criptografada pela chave mestra do serviço? Caso contrário, o mecanismo db não terá como abri-lo automaticamente. Para verificar, dê uma olhada em
sys.asymmetric_keys
, especificamente napvt_key_encryption_type_desc
coluna. Se você achar que não é, você pode fazer isso fazendo