我有一个用 c# 编写的 windows/WPF 应用程序。此应用程序连接到托管在我们的公共服务器中的远程数据库。该应用程序将安装到所有系统。用户可以通过此应用程序将值添加到数据库中。当有人向数据库添加任何值时,我需要一种通知机制来向所有已安装的 Windows 应用程序发送通知。
请建议我实施此方案的最佳方法。
提前致谢。
我有一个用 c# 编写的 windows/WPF 应用程序。此应用程序连接到托管在我们的公共服务器中的远程数据库。该应用程序将安装到所有系统。用户可以通过此应用程序将值添加到数据库中。当有人向数据库添加任何值时,我需要一种通知机制来向所有已安装的 Windows 应用程序发送通知。
请建议我实施此方案的最佳方法。
提前致谢。
您可以使用 SQL Server 的查询通知功能,该功能允许在数据更改时通知应用程序。
请参阅以下链接。
使架构具有通用性和接口驱动,因此您可以换出底层传输。
public interface INotificationService
{
event EventHandler NewNotification;
void SendEvent(string eventDetails);
}
作为一个非常简单的例子。
实施,你有几个(一百个)选项。您提到事件正在被放入数据库中。如果您确保有一个唯一的、递增的整数键,您可以从每个客户端轮询数据库中的任何事件 > 最后一个事件 ID。每 10 秒执行一次,或者以您可以逃脱的速度执行一次。这对性能的影响很小,效率也不高,但非常简单可靠,并且您已经可以访问数据库,因为您将事件放在那里。
或者,您可以创建 Web 服务或 WCF 服务。Web 服务通常需要轮询,WCF 服务可以配置双工通信,因此您不需要轮询。
其他选项包括 MSMQ,或其他消息传递解决方案之一,RabbitMQ、Tibco 等等。这一切都取决于细节。
这里重要的是确保您拥有初始接口和代码,这样,如果您的数据库轮询变得太慢并且您需要升级到 Tibco,这是一个非常本地化的简单更改。