我正在開發一個應用程序(學校項目),它是一個服務+外部WPF UI。 我已經計劃使用WCF進行用戶界面到服務的通信。 無論如何,如果發生一些事件,服務需要通知UI,我正在尋找一種簡單的方法來實現它。將服務發送到WPF應用程序的好方法
當然,任何基本的IPC都可以工作,但我不想搞亂管道,互斥,事件等等。
在本機win32應用程序中,我會使用WM_USER
消息,但據我瞭解,它本身不受WPF支持。
有人能指出一些可能的/最好的解決方案嗎?
感謝
我正在開發一個應用程序(學校項目),它是一個服務+外部WPF UI。 我已經計劃使用WCF進行用戶界面到服務的通信。 無論如何,如果發生一些事件,服務需要通知UI,我正在尋找一種簡單的方法來實現它。將服務發送到WPF應用程序的好方法
當然,任何基本的IPC都可以工作,但我不想搞亂管道,互斥,事件等等。
在本機win32應用程序中,我會使用WM_USER
消息,但據我瞭解,它本身不受WPF支持。
有人能指出一些可能的/最好的解決方案嗎?
感謝
您可以使用WCF Callback Operations來通知客戶端。
你可以嘗試EventAggregator
以發送通知(訂閱+發佈方法)
鏈接:http://msdn.microsoft.com/en-us/library/ff921122%28v=pandp.20%29.aspx
一種方法我用的是充當一個共享的數據庫表隊列。您的用戶界面應用會跟蹤它所看到的最後一條記錄(索引或時間戳)並定期輪詢新事件。將您的查詢和更新與事務綁定,以防止出現併發問題。數據庫的一個優點是它保留了有助於調試和崩潰的事件。 System.Data.Sqlite,RavenDB和Sql Server Compact Edition是不錯的選擇。
另一種選擇是使用ZeroMQ作爲通過TCP/IP的發佈/訂閱消息系統。 ZeroMQ非常易於安裝,並且可以處理高消息量。
數據庫和ZeroMQ方法都可讓您將UI應用程序置於遠程計算機上,而不需要將其置於服務主機上。
我還建議您將事件定義爲類並將其序列化爲字符串,而不管您是使用數據庫還是使用ZeroMQ來傳遞事件。我建議ServiceStack的優秀,易於使用的JSON串行器。
其實我已經有一個Sql Server CE。問題在於「輪詢」解決方案不是我正在尋找的,否則我可以使用WCF定期詢問要通知的事情。我也使用過RabbitMQ作爲NodeJS/Reverse Ajax項目,但它需要額外的軟件運行。 – ArtoAle
ZeroMQ不需要單獨的消息代理應用程序 - 您將一個程序集添加到服務和UI客戶端,同時該服務也充當代理。它在NuGet上可用。 –
您的服務和應用程序是否在不同的機器上運行?如果您的服務在您的應用程序未運行時發送通知,您希望在應用程序下次運行時收到通知嗎?如果是這樣,你最好的選擇是Message Queuing。
我從來沒有聽說過這個:)我會看看這個 – ArtoAle
WCF支持雙工通信。 –
互斥和事件不是真正的IPC。它們是不傳遞數據的跨進程同步基元。推薦的做法是使用命名管道。 WCF將包裝一個管道,以便您可以使用WCF通過管道進行通信;或者你可以使用.NET管道API。另一種方法是使用套接字 - WCF也將包裝。 –
我絕對需要深入研究WCF。無論如何,如果我想做一個雙工WCF通信可以服務工作,而用戶界面不運行(另一個WCF端無法訪問?) – ArtoAle