Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自数据库的通知,而不是轮询。可能吗?_C#_.net_Sql_Sql Server 2008 - Fatal编程技术网

C# 来自数据库的通知,而不是轮询。可能吗?

C# 来自数据库的通知,而不是轮询。可能吗?,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存

嗨,伙计们

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

是否有机会使用通知(避免SqlDependency,在我的场景中太慢)代替轮询

你知道吗

我的场景是.net+Sql Server 2008


谢谢

您可以使用,但这会在缓存数据场景中包装SqlDependency。但是,您的问题对于为什么要这样做有点模糊。

调用应用程序是否可以改为说write to a


如果不是,我猜数据库上有一个触发器调用了?这可以触发任何类型的所需事件。

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

这实际上需要两个步骤

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

  • clr存储过程。 clr存储过程将使用连接到数据库

    “上下文连接=true”

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

    我看到您说您需要通知(并且
    SqlDependency
    可用于此),但您可能不需要即时通知,而高效地定期读取更改将完成此任务。如果是这样,请转到谷歌
    更改数据捕获
    ,以及
    更改跟踪

    我需要此轮询以尽快知道数据库中是否存储了数据,从而将此消息重定向到另一个系统。在我的场景中,我必须fast@Blam我知道,这就是为什么我想改变我的方法,只是想验证一下。SqlChangeMonitor类可能没有那么快。数据更新来自何处?您是否控制了数据库服务器。例如,您是否可以添加存储过程、触发器、clr?这将提供更多选项。但你仍然没有回答一个问题。更新来自哪里?您是否控制该应用程序?@Blam:更新来自低级系统,我控制该应用程序的insert语句,我也完全控制用于交换数据的Sql Server是的,我还可以更改应用程序。但排队是什么意思?一旦我有了这个队列中的消息,如何通知我的应用程序一个新的数据已经准备好被提取?可行,但我想有一些更面向事件的东西,如果可能的话更面向事件?你什么意思?这是我在需要即时通知数据库中的更改时使用的。对多达30个表进行了更改,并将发生的一切通知应用程序。此外,在这种情况下,会根据更改的数据通知多个服务。。我不知道还有其他更快的通知方法。顺便说一句,这取决于你的复杂程度。这只是一个开始的框架。我为每个服务提供了带队列的线程通知,以确保消息的正确顺序,如果通知来得如此之快(10-20毫秒非常快),那么就没有那么复杂了。我只有一个消息源和一个目标:它们只需快速通信并通过sql Server即可。这与您的网络一样快。如果它只是一个通知,则不需要在临时表中实际存储数据,这将使其速度更快。我有大约2毫秒的通知。不幸的是,我需要即时的(或者几乎是即时的,我可以“等待”不超过12毫秒)