确定当前项目中是否调用了SqlDependency.Start(connectionstring)

本文关键字:SqlDependency Start connectionstring 调用 是否 项目 | 更新日期: 2023-09-27 18:21:04

我们的应用程序使用了许多共享组件。其中一些不需要缓存,例如,处理未归档电子邮件的Windows服务。你永远不会缓存结果集。。。

问题是,由于我们的共享数据层已被修改为使用SqlCacheDependency,因此我们不启动SqlDependency的服务在数据层请求SqlCacheDeprency对象的数据库调用中失败。

这就引出了一个问题——我们的数据类是否有一种方法可以测试broker服务是否在侦听(即:是否调用了SqlDependency.Start(connectionString))?

SqlDependency对象本身没有Enabled或类似的属性。除了强制调用应用程序告诉数据层SqlCaching正在用于数据层以确定状态之外,还有什么办法吗?

确定当前项目中是否调用了SqlDependency.Start(connectionstring)

答案基本上是否定的。我们最终添加了一个配置变量,如果该变量为false或不存在,则会跳过使用SqlCacheDependency的请求。

SELECT*FROM sys.service_queues WHERE name LIKE'SqlQueryNotificationService-%'

返回一个"SqlQueryNotificationService-[some-guid]"

如果您在IDE中调试时深入查看SqlDependency_serverUserHash的非公共成员,您会发现一个包含相同条目的集合。如果微软愿意公开这一点,那么是的。

在我的例子中,我有一个类库,它被一些web应用程序使用。所以我没有App.config。我还在静态事件中使用SqlCacheDependency。所以我使用了一个静态布尔值,比如:

if (!isCachingEnabled)
  isCachingEnabled = SqlDependency.Start(builder.ProviderConnectionString);

到目前为止是有效的,但我对使用类库时的建议持开放态度。