嗨,伙计们,
为了监视数据库上的指定表,我每隔几毫秒(10-20 毫秒)轮询一次。
是否有机会获得通知(避免 SqlDependency,在我的场景中太慢)而不是轮询?
你有什么主意吗?
我的场景是 .net + Sql Server 2008
谢谢!
嗨,伙计们,
为了监视数据库上的指定表,我每隔几毫秒(10-20 毫秒)轮询一次。
是否有机会获得通知(避免 SqlDependency,在我的场景中太慢)而不是轮询?
你有什么主意吗?
我的场景是 .net + Sql Server 2008
谢谢!
可以使用将调用 WCF/或 Web 服务的 CLR 存储过程来完成。这不是一件很难做到的事情。
这实际上需要 2 个步骤。
数据的修改。修改数据后,您必须将数据发送到 clr 存储过程。最简单的方法是将其写入一个或多个临时表。
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 代码。这种方法非常快速且非常可靠。
您可以使用SqlChangeMonitor 类,但它将 SqlDependency 包装在缓存数据场景中。不过,您的问题对于您为什么要这样做有点含糊。
我看到您说您需要通知(并且SqlDependency
可用),但也许您不需要即时通知,并且定期有效地阅读更改将完成任务。如果是这样,去谷歌Change Data Capture
,和Change Tracking
。