【问题标题】:Determine if SqlDependency.Start(connectionstring) has been called in current project?确定当前项目中是否调用了 SqlDependency.Start(connectionstring)?
【发布时间】:2013-11-11 22:21:29
【问题描述】:

我们的应用程序使用大量共享组件。其中一些不需要缓存,例如处理未邮寄电子邮件的 Windows 服务。您永远不会缓存该结果集...

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

这导致了这个问题——我们的数据类有没有办法测试代理服务是否正在侦听(即:是否调用了 SqlDependency.Start(connectionString))?

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

【问题讨论】:

  • 这刚刚赢得了风滚草徽章...

标签: c# sql-server-2008 sqlcachedependency


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    返回一个 'SqlQueryNotificationService-[一些 guid]'

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

    【讨论】:

    • 所以基本上,在运行时,没有。
    【解决方案3】:

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

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

    到目前为止工作正常,但在使用类库时我愿意接受建议。

    【讨论】:

      猜你喜欢
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      相关资源
      最近更新 更多