C# 来自数据库的通知,而不是轮询。可能吗?
嗨,伙计们 为了监视db上的指定表,我每隔几毫秒(10-20毫秒)轮询一次这个表 是否有机会使用通知(避免SqlDependency,在我的场景中太慢)代替轮询 你知道吗 我的场景是.net+Sql Server 2008C# 来自数据库的通知,而不是轮询。可能吗?,c#,.net,sql,sql-server-2008,C#,.net,Sql,Sql Server 2008,嗨,伙计们 为了监视db上的指定表,我每隔几毫秒(10-20毫秒)轮询一次这个表 是否有机会使用通知(避免SqlDependency,在我的场景中太慢)代替轮询 你知道吗 我的场景是.net+Sql Server 2008 谢谢 您可以使用,但这会在缓存数据场景中包装SqlDependency。但是,您的问题对于为什么要这样做有点模糊。调用应用程序是否可以改为说write to a 如果不是,我猜数据库上有一个触发器调用了?这可以触发任何类型的所需事件。可以使用调用WCF/或Web服务的CLR存
谢谢 您可以使用,但这会在缓存数据场景中包装SqlDependency。但是,您的问题对于为什么要这样做有点模糊。调用应用程序是否可以改为说write to a
如果不是,我猜数据库上有一个触发器调用了?这可以触发任何类型的所需事件。可以使用调用WCF/或Web服务的CLR存储过程来完成。这不是很难做到的事 这实际上需要两个步骤
system.web
smdiagnostics
system.runtime.serialization
system.identitymodel
system.identitymodel.selectors
system.messagng
system.transactions.bridge
system.servicemodel
其他一切都是调用WCF/Web服务的普通.NET代码。
这种方法非常快速且非常可靠。我看到您说您需要通知(并且
SqlDependency
可用于此),但您可能不需要即时通知,而高效地定期读取更改将完成此任务。如果是这样,请转到谷歌更改数据捕获
,以及更改跟踪
我需要此轮询以尽快知道数据库中是否存储了数据,从而将此消息重定向到另一个系统。在我的场景中,我必须fast@Blam我知道,这就是为什么我想改变我的方法,只是想验证一下。SqlChangeMonitor类可能没有那么快。数据更新来自何处?您是否控制了数据库服务器。例如,您是否可以添加存储过程、触发器、clr?这将提供更多选项。但你仍然没有回答一个问题。更新来自哪里?您是否控制该应用程序?@Blam:更新来自低级系统,我控制该应用程序的insert语句,我也完全控制用于交换数据的Sql Server是的,我还可以更改应用程序。但排队是什么意思?一旦我有了这个队列中的消息,如何通知我的应用程序一个新的数据已经准备好被提取?可行,但我想有一些更面向事件的东西,如果可能的话更面向事件?你什么意思?这是我在需要即时通知数据库中的更改时使用的。对多达30个表进行了更改,并将发生的一切通知应用程序。此外,在这种情况下,会根据更改的数据通知多个服务。。我不知道还有其他更快的通知方法。顺便说一句,这取决于你的复杂程度。这只是一个开始的框架。我为每个服务提供了带队列的线程通知,以确保消息的正确顺序,如果通知来得如此之快(10-20毫秒非常快),那么就没有那么复杂了。我只有一个消息源和一个目标:它们只需快速通信并通过sql Server即可。这与您的网络一样快。如果它只是一个通知,则不需要在临时表中实际存储数据,这将使其速度更快。我有大约2毫秒的通知。不幸的是,我需要即时的(或者几乎是即时的,我可以“等待”不超过12毫秒)