我正在开发一个应用程序(学校项目),它是一个服务+一个外部WPF UI。 我计划使用WCF进行UI到服务的通信。 无论如何,如果发生某些事件,服务需要通知UI,我正在寻找一种简单的方法。
当然,任何基本的IPC都可以工作,但我不想搞乱管道,互斥,事件等。
在原生的win32应用中,我使用了WM_USER
消息,但据我所知,WPF本身不支持它。
有人可以指出一些可能的/最佳解决方案吗?
由于
答案 0 :(得分:3)
您可以使用WCF Callback Operations通知客户。
答案 1 :(得分:2)
我使用的一种方法是充当队列的共享数据库表。您的UI应用程序会跟踪它看到的最后一条记录(索引或时间戳)并定期轮询新事件。使用事务绑定查询和更新以防止并发问题。数据库的一个优点是它可以保留有助于调试和崩溃的事件。 System.Data.Sqlite,RavenDB和Sql 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