2

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

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

在本机 win32 应用程序中,我使用了一条WM_USER消息,但据我了解,WPF 本身并不支持它。

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

谢谢

4

4 回答 4

3

您可以使用 WCF回调操作来通知客户端。

于 2012-09-07T10:09:07.803 回答
2

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

另一种选择是使用ZeroMQ作为通过 TCP/IP 的发布/订阅消息系统。ZeroMQ 非常容易设置并且可以处理大量消息。

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

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

于 2012-09-06T19:07:42.007 回答
1

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

于 2012-09-06T20:48:30.543 回答
0

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

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

于 2012-09-06T18:37:29.223 回答