从服务向WPF应用程序发送通知的好方法

时间:2012-09-06 15:39:37

标签: c# wpf wcf service ipc

我正在开发一个应用程序(学校项目),它是一个服务+一个外部WPF UI。 我计划使用WCF进行UI到服务的通信。 无论如何,如果发生某些事件,服务需要通知UI,我正在寻找一种简单的方法。

当然,任何基本的IPC都可以工作,但我不想搞乱管道,互斥,事件等。

在原生的win32应用中,我使用了WM_USER消息,但据我所知,WPF本身不支持它。

有人可以指出一些可能的/最佳解决方案吗?

由于

4 个答案:

答案 0 :(得分:3)

您可以使用WCF Callback Operations通知客户。

答案 1 :(得分:2)

我使用的一种方法是充当队列的共享数据库表。您的UI应用程序会跟踪它看到的最后一条记录(索引或时间戳)并定期轮询新事件。使用事务绑定查询和更新以防止并发问题。数据库的一个优点是它可以保留有助于调试和崩溃的事件。 System.Data.SqliteRavenDBSql Server Compact Edition是不错的选择。

另一种方法是通过TCP / IP使用ZeroMQ作为发布/订阅消息系统。 ZeroMQ非常易于设置,可以处理高消息量。

数据库和ZeroMQ方法都允许您将UI应用程序放在远程计算机上,而不是要求它位于服务主机上。

我还建议您将事件定义为类,并将其序列化为字符串,无论您是使用数据库还是ZeroMQ来传递事件。我推荐使用ServiceStack优秀且易于使用的JSON序列化程序。

答案 2 :(得分:1)

您的服务和应用程序是否在不同的计算机上运行?如果您的服务在您的应用未运行时发送通知,您是否希望在下次运行应用时收到通知?如果是这样,您最好的选择是Message Queuing

答案 3 :(得分:0)

您可以尝试EventAggregator以发送通知(订阅+发布方法)

链接:http://msdn.microsoft.com/en-us/library/ff921122%28v=pandp.20%29.aspx