Estou investigando um problema com notificações de consulta. A plataforma é SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Standard Edition.
Erros .NET mostram um problema relatado de SqlNotificationInfo Enumeration ( http://msdn.microsoft.com/en-gb/library/system.data.sqlclient.sqlnotificationinfo(v=vs.80).aspx ) como: Razão do Evento: Isolamento .
Durante o rastreamento, percebo que o evento de login de auditoria imediatamente anterior à conversa do Broker mostra:
-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read uncommitted
Portanto, minha teoria de trabalho é que o nível de isolamento da transação usado para a conversa não é suportado. Mas onde está esse conjunto e como posso alterá-lo?
Eu li sobre um problema semelhante aqui:
http://www.roelvanlisdonk.nl/?p=3144 e
http://www.sqlskills.com/blogs/bobb/watch-the-sqlnotificationinfo-for-query-notifications/
A explicação para esse problema acabou sendo um problema com outra parte do aplicativo abrindo explicitamente conexões de leitura não confirmadas. Essas conexões lidas não confirmadas foram deixadas no pool de conexões e reutilizadas pelo service broker, que não pode operar usando esse nível de isolamento.
A solução foi simples: certifique-se de que o agente de serviço esteja se conectando com uma cadeia de conexão diferente, usando assim um pool de conexão diferente.