我正在开发一个应用程序(学校项目),它是一项服务 + 一个外部 WPF UI。我计划使用 WCF 进行 UI 到服务的通信。无论如何,如果发生某些事件,服务需要通知 UI,我正在寻找一种简单的方法来做到这一点。
当然,任何基本的 IPC 都可以工作,但我不想弄乱管道、互斥体、事件等。
在本机 win32 应用程序中,我使用了一条WM_USER
消息,但据我了解,WPF 本身并不支持它。
有人可以指出一些可能/最佳解决方案吗?
谢谢
您可以使用 WCF回调操作来通知客户端。
我使用的一种方法是充当队列的共享数据库表。您的 UI 应用程序会跟踪它看到的最后一条记录(索引或时间戳)并定期轮询新事件。将您的查询和更新与事务绑定以防止并发问题。数据库的一个优点是它保存有助于调试和崩溃的事件。System.Data.Sqlite、RavenDB和Sql Server Compact Edition是不错的选择。
另一种选择是使用ZeroMQ作为通过 TCP/IP 的发布/订阅消息系统。ZeroMQ 非常容易设置并且可以处理大量消息。
数据库和 ZeroMQ 方法都允许您将 UI 应用程序放在远程机器上,而不是要求它位于服务主机上。
我还建议您将事件定义为一个类并将其序列化为字符串,无论您是使用数据库还是 ZeroMQ 来传递事件。我推荐ServiceStack的优秀、易于使用的 JSON 序列化器。
您的服务和应用程序是否在不同的机器上运行?如果您的服务在您的应用未运行时发送通知,您是否希望在您的应用下次运行时收到通知?如果是这样,您最好的选择是Message Queuing。
您可以尝试EventAggregator
发送通知(订阅+发布方法)
链接:http: //msdn.microsoft.com/en-us/library/ff921122%28v=pandp.20%29.aspx