3

嗨,伙计们,

为了监视数据库上的指定表,我每隔几毫秒(10-20 毫秒)轮询一次。

是否有机会获得通知(避免 SqlDependency,在我的场景中太慢)而不是轮询?

你有什么主意吗?

我的场景是 .net + Sql Server 2008

谢谢!

4

5 回答 5

1

可以使用将调用 WCF/或 Web 服务的 CLR 存储过程来完成。这不是一件很难做到的事情。

这实际上需要 2 个步骤。

  1. 数据的修改。修改数据后,您必须将数据发送到 clr 存储过程。最简单的方法是将其写入一个或多个临时表。

  2. clr 存储过程。clr 存储过程将连接到数据库

    “上下文连接=真”

这样您就可以访问所需的存储过程。加载数据后,您将其发送到服务器(WCF/webservice)。在 CLR 中,您只需添加所需的服务引用。同样在服务器上,您必须注册一些 dll 供服务器使用:

system.web
smdiagnostics
system.runtime.serialization
system.identitymodel
system.identitymodel.selectors
system.messagng
system.transactions.bridge
system.servicemodel

其他一切都是调用 WCF/Web 服务的纯 .NET 代码。这种方法非常快速且非常可靠。

于 2012-09-21T13:24:12.473 回答
1

要在 SQL 中获取 onChange 事件通知,您可以使用构建在 Server Broker 上的查询通知功能。

替代方案是:

  1. 数据库触发器
  2. 信号R
  3. 变更数据捕获
  4. 更改跟踪
于 2021-12-06T09:31:06.713 回答
0

您可以使用SqlChangeMonitor 类,但它将 SqlDependency 包装在缓存数据场景中。不过,您的问题对于您为什么要这样做有点含糊。

于 2012-09-21T13:16:02.540 回答
0

可以将调用应用程序更改为写入队列吗?

如果不是,我猜数据库上的触发器调用了CLR 存储过程?这可以触发所需的任何类型的事件。

于 2012-09-21T13:19:04.150 回答
0

我看到您说您需要通知(并且SqlDependency可用),但也许您不需要即时通知,并且定期有效地阅读更改将完成任务。如果是这样,去谷歌Change Data Capture,和Change Tracking

于 2012-09-21T13:32:28.927 回答