Determinar se SqlDependency.Start(connectionstring) foi chamado no projeto atual?
-
12-11-2019 - |
Pergunta
Nossos aplicativos usam muitos componentes compartilhados.Alguns deles não precisam de cache, por exemplo, os Serviços do Windows que processam e-mails não enviados.Você nunca armazenaria em cache esse conjunto de resultados ...
O problema é que, como nossa camada de dados compartilhada foi modificada para usar SqlCacheDependency, nossos serviços que não iniciam SqlDependency falham em chamadas de banco de dados em que a camada de dados solicita um objeto SqlCacheDependency.
O que leva à pergunta: existe uma maneira de nossas classes de dados testarem se o serviço do corretor está escutando (ou seja:SqlDependency.Start(connectionString) foi chamado)?
O próprio objeto SqlDependency não possui propriedade Enabled ou semelhante.Existe alguma maneira de forçar o aplicativo de chamada a dizer a camada de dados que o SqlCaching está em uso para a camada de dados determinar o estado?
Solução
praticamente a resposta é não.Acrescentamos adicionando uma variável de configuração que, se false ou não presente, faz com que a solicitação use SqlcachedEpendency a ser ignorada.
Outras dicas
Select * from Sys.service_Queues onde nome como 'sqlquerynotificationervice -%'
retorna a 'sqlquerynotificationervice- [algum GUID]'
E se você olhar profundamente nos membros não públicos do Sqldeependency _serverUserHash durante a depuração no IDE, você encontrará uma coleção que contenha essa mesma entrada.Se a Microsoft seria tão gentil a ponto de expor que, sim.
No meu caso, tenho uma biblioteca de classes que é usada por algumas aplicações web.Portanto, não tenho App.config.Também uso o SqlCacheDependency em um evento estático.Então, estou usando um booleano estático como:
if (!isCachingEnabled)
isCachingEnabled = SqlDependency.Start(builder.ProviderConnectionString);
Até agora está funcionando, mas estou aberto a sugestões ao usar bibliotecas de classes.