【问题标题】:How to implement Notification Mechanism in windows application?如何在 Windows 应用程序中实现通知机制?
【发布时间】:2013-01-04 09:28:26
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 是直接连接数据库的吗?没有服务器? SQL 服务器?使用消息代理通知收听消息的客户端。
  • 我正在使用sql server。数据库更新不会定期发生。它可能会在一天或两天后发生。所以我认为计时器或从应用程序频繁检查不是一种有效的方法。但是只有在更新发生时,我们才需要从服务器向客户端应用程序(Windows 应用程序)发送通知。
  • 永远不要从服务器向客户端发送通知 - 始终让客户端连接。 Message Broker 完全支持这一点。

标签: c# api windows-services windows-applications


【解决方案1】:

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

请参考以下链接。

http://support.microsoft.com/kb/555893?wa=wsignin1.0

【讨论】:

  • 这就是我提到的——使用代理。是的,它会工作,因为它是客户端打开与服务器的连接并等待通知。
【解决方案2】:

使架构具有通用性和接口驱动,因此您可以更换底层传输。

public interface INotificationService
{
    event EventHandler NewNotification;
    void SendEvent(string eventDetails);
}

作为一个非常简单的例子。

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

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

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

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

【讨论】:

  • 我正在使用sql server。数据库更新不会定期发生。它可能会在一天或两天后发生。所以我认为计时器或从应用程序频繁检查不是一种有效的方法。但是只有在更新发生时,我们才需要从服务器向客户端应用程序(Windows 应用程序)发送通知。
猜你喜欢
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多