Windows桌面通知

时间:2015-06-22 05:40:58

标签: winforms notifications desktop

我们想为以下场景构建一个应用程序(c#/ .Net):

  • 内部"警报系统"。应告知用户系统中断,服务的计划停机时间等。
  • 仅限单向:中央服务将消息推送给用户
  • 我们还需要启用/禁用消息的可能性,例如: 消息"邮件系统存在问题"应在问题解决后从每台计算机上删除
  • 我们希望将消息用于计划的维护
  • 约1000个窗口客户端,我们也希望" group"此客户端,以便我们可以控制哪个客户端将收到消息

首先想到的是编写一个小应用程序,它将每X秒查询一个新的和现有消息的中央数据库。

也许有人已经开始从事类似的项目了? 客户端是否有数据库查询的方法?更好地使用其他技术,如WCF服务?

感谢您的帮助

马克

1 个答案:

答案 0 :(得分:1)

听起来您需要推送通知的增强版本。 我建议使用push来进行所有的消息传递,它的传递速度更快,我发现它更可靠。只需使客户端连接到消息服务器并保持连接打开即可。每当消息应该显示给客户端时,让服务器通过连接(名称来自的位置)推送它。

要分组和管理可以使用数据库的客户端,它可能是最好的方法,但服务器需要处理所有打开的连接,数据库只能存储DATA,而不能存储代表连接的虚拟对象,所以服务器软件需要以不同的方式管理它们。

我的建议:每当服务器收到传入的客户端连接时,它都会接受并向客户端计算机查询一个ID号,该ID号也将用于在数据库中查找该客户端的信息。

然后它将使用该ID作为键创建字典,并将连接作为值。 这种方式在向确定的组发送消息时,您可以通过两种方式进行:

1)您可以从数据库加载属于该组的ID,然后将消息发送给它们。您必须检查字典的KEYS数组中是否存在该ID,因为确定的客户端可能尚未连接。

2)你可以迭代字典的KEYS数组,检查ID属于哪个组,如果是欲望组,则发送它。

如果您正在与大量客户打交道,我建议您使用方法1.

要禁用/删除客户端计算机上的消息,只需让服务器发送一条特殊的命令消息,客户端软件将其解释为“删除该消息”。为此,每个非命令消息都必须具有唯一的ID,以便命令消息可以告诉客户端软件该命令适用于哪个消息。

你的项目听起来很有趣。 我很乐意通过编写您可以使用的库来帮助您,或者如果您愿意,可以帮助您自己解决这个问题。 (免费,仅用于体验)。