C# 如何在windows应用程序中实现通知机制?

C# 如何在windows应用程序中实现通知机制?,c#,api,windows-services,windows-applications,C#,Api,Windows Services,Windows Applications,我有一个用c#编写的windows/WPF应用程序。该应用程序连接到我们公共服务器中托管的远程数据库。该应用程序将安装到所有系统。用户可以通过该应用程序将值添加到数据库中。 我需要一个通知机制,当有人向数据库添加任何值时,向所有已安装的windows应用程序发送通知 请告诉我实现此方案的最佳方法 提前感谢。使体系结构通用并受接口驱动,这样您就可以交换底层传输 public interface INotificationService { event EventHandler NewNot

我有一个用c#编写的windows/WPF应用程序。该应用程序连接到我们公共服务器中托管的远程数据库。该应用程序将安装到所有系统。用户可以通过该应用程序将值添加到数据库中。 我需要一个通知机制,当有人向数据库添加任何值时,向所有已安装的windows应用程序发送通知

请告诉我实现此方案的最佳方法


提前感谢。

使体系结构通用并受接口驱动,这样您就可以交换底层传输

public interface INotificationService
{
    event EventHandler NewNotification;
    void SendEvent(string eventDetails);
}
作为一个非常简单的例子

对于实现,您有几个(数百个)选项。您提到事件被放入数据库中。如果确保存在唯一的递增整数键,则可以从每个客户端轮询数据库中的任何事件>最后一个事件ID。每10秒轮询一次,或者以最快的速度轮询一次。这对性能的影响很小,效率不高,但非常简单可靠,而且您已经可以访问数据库,因为您正在将事件放在那里

或者,您可以创建web服务或WCF服务。Web服务通常需要轮询,WCF服务可以配置双工通信,因此您不需要轮询

其他选项包括MSMQ,或其他消息传递解决方案之一,RabbitMQ,Tibco,等等。这完全取决于细节


这里最重要的是确保您具有初始接口和代码,这样,如果您的数据库轮询变得太慢,需要升级到Tibco,这是一个非常本地化的简单更改。

您可以使用SQL Server的查询通知功能,允许在数据更改时通知应用程序

请参阅以下链接


是否直接连接到数据库?没有服务器?SQL Server?使用message broker通知侦听消息的客户端。我使用的是sql server。数据库更新不会定期发生。它可能会在一天或两天之后发生。因此我认为计时器或应用程序的频繁检查不是一种有效的方法。但我们需要将通知从服务器发送到客户端应用程序(Windows应用程序)仅当发生更新时。永远不要从服务器向客户端发送通知-始终让客户端连接。Message Broker正好支持这一点。我使用的是sql server。数据库更新不会定期进行。它可能会在一天或两天之后发生。因此,我认为计时器或应用程序的频繁检查不是一种有效的方法。但我们需要从服务器向客户端应用程序(Windows应用程序)发送通知只有当更新发生时。这就是我提到的-使用代理。是的,它将工作,因为它是客户端打开与服务器的连接并等待通知。