来自db而不是轮询的通知。可能吗?

时间:2012-09-21 13:10:40

标签: c# .net sql sql-server-2008

Hy guys,

监视db上的指定表我每隔几毫秒(10-20 ms)轮询一次这个表。

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

你有什么想法吗?

我的方案是.net + Sql Server 2008

谢谢!

4 个答案:

答案 0 :(得分:1)

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

这实际上需要2个步骤。

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

  2. clr存储过程。 clr存储过程将使用

    连接到db

    “context connection = true”

  3. 这样您就可以访问所需的存储过程。加载数据后,将其发送到服务器(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代码。 这种方法非常快速且非常可靠。

答案 1 :(得分:0)

您可以使用SqlChangeMonitor class,但在缓存数据方案中包装SqlDependency。不过,你的问题对于你想要这样做的原因有点模糊。

答案 2 :(得分:0)

是否可以更改调用应用程序以代替写入queue

如果不是,我猜数据库上的一个触发器调用CLR Stored Procedure?这可能会引发任何需要的事件。

答案 3 :(得分:0)

我看到你说你需要通知(并且SqlDependency可用),但也许你不需要即时通知,并且定期有效地阅读更改将完成任务。如果是,请转到Google Change Data CaptureChange Tracking