gpt4 book ai didi

c# - SqlDependency 随时间丢失订阅

转载 作者:IT王子 更新时间:2023-10-29 03:56:36 28 4
gpt4 key购买 nike

我一直在使用 SqlDependency在 .NET 3.5 应用程序中使用超过 3 年没有任何问题。场景如下:

  1. 带有 SqlDependency 的中央窗口服务看一张 table (我们称这张 table A)
  2. 多个用户使用具有唯一 SqlDependency 的 WPF 应用程序每个用户观看一张 table (又是一张 table )
  3. 用户在表 A 中排队处理一个工作单元
  4. SqlDependency在 Windows 服务上触发
  5. Windows 服务处理表 A 中所有未完成的项目并将结果保存到表 A
  6. 为每个结果可用的用户触发唯一的 SqlDependency
  7. 用户处理他们的工作

最近我已将系统升级到 .NET 4.5 并开始看到将更改放入我们正在监视的表中的问题,但是 SqlDependency永远不会触发(在服务和用户应用程序中)。我开始进一步研究这个问题,并在我的日志中注意到,在某个时候我会重新注册 SqlDependency ,但此后通知将永远不会触发。

看到这种行为后,我决定在 SQL Server 上运行探查器来捕获订阅事件。从捕获的数据中,我注意到有时订阅会被一个用户注册(使用唯一 ID),但随后它会被另一个用户触发(使用相同的唯一 ID)。这通常发生在我上面提到的服务和 WPF 应用程序的一个或多个用户身上。 (我在探查器结果中附上了问题的屏幕截图)

这是预期的行为吗?可以为与注册用户不同的用户触发通知吗?这是否表明应用层存在问题?感谢您的帮助。

Profiler Results

最佳答案

由于正在创建多个 SqlDependency 实例,我将检查重复订阅,如概述 here .根据您的配置,订阅可能被视为重复。该行为“意味着如果为相同的查询请求通知,则只会发送一个通知。”

要检查的另一件事是 OnChange 事件是否实际上可以工作,但由于它在不同的线程上触发而不会出现。注意 SqlDependency 的多线程特性 here .

Profiler 跟踪表明 Service Broker 正在执行其工作。在 .NET 层中添加额外的跟踪将显示订阅是否在数据库级别触发,但不会导致 OnChange 事件触发。可以找到其他故障排除提示 here .

关于c# - SqlDependency 随时间丢失订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19687283/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com