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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top