2010-04-20 33 views
1

所以我創建了一系列通過串口與硬件交互的對象。有一個線程運行監視串行端口,並且如果硬件的狀態改變它將更新我的對象中的屬性。我使用可觀察的集合和INotifyPropertyChanged。WCF是否允許我在實現INotifyPropertyChanged或包含observablecollection對象的對象上跨越邊界使用對象引用?

我已經在WPF中構建了一個UI,它工作的很好,當硬件發生變化時向我顯示實時更新,並允許我通過使用綁定更改這些屬性來更改硬件。

我希望的是,我可以在不同的機器上運行用戶界面,而不是通過硬件連接起來,而不需要大量的事件連接。可能甚至允許多個UI連接到相同的服務並與此硬件進行交互。

到目前爲止,我明白我將需要創建一個WCF服務。我試圖弄清楚我是否可以將對服務創建的對象的引用傳遞給客戶端,使事件保持不變。這樣UI纔會真正綁定到遠程對象。

我正在用WCF移動正確的方向嗎?

另外我看到在C#中WCF的例子很多,在VB中是否有任何良好的實際使用示例,可​​能是我想要做的事情?

+0

更新我的答案與一些額外的信息 - WCF的pub/sub機制 – 2010-04-21 05:25:16

+0

我期待成現在。它仍然拋棄了我試圖做的事情,但肯定會指引我朝着正確的方向發展。 – zimmer62 2010-04-22 14:25:02

回答

2

不,WCF是一個基於消息的系統 - 傳遞序列化(text/xml)消息。沒有可以傳遞的「對象引用」。

客戶端有一個代理,它使您能夠「調用」服務方法。 WCF運行時然後捕獲該調用的參數,將它們打包在一個序列化消息中,並通過線路發送該消息。

客戶端和服務器之間沒有直接聯繫 - 客戶端不能「達到了」以服務來獲得一個遠程對象,也可以在服務返回給客戶端,以找出誰叫它或類似的東西。

您要發送到服務的所有內容都必須是消息本身或消息附帶的標頭的一部分。

這些消息必須符合XML模式標準,這也意味着:只有具體的非泛型類型。你無法繞過的接口,你可以不通過引用 - 僅由基本類型的這樣的字符串,INT具體類型,日期時間等

更新:也許你需要檢查的發佈/訂閱(pub/sub)模式 - 你也可以使用WCF構建。這將允許您的數據收集機定期或在其發生變化時向其發送數據,並且可以通知任何數量的訂戶這些更改。

查看一些這些文章 - 谷歌搜索或「WCF酒吧子」的結果肯定會變成更多!

+0

所以如果這是不可能的,我是否需要退後一步並重新考慮如何實現這個目標:客戶端上可能存在對象,並且只能通過串口傳遞消息,或者有沒有另一種技術可以讓我訪問宿主上的.net對象,就好像它們在客戶端的UI上是本地的? – zimmer62 2010-04-20 17:04:21

+0

我認爲您需要重新考慮您的架構 - 設計它,以便您的客戶端對象從服務調用中更新(其數據字段) - 但不是參考本身 - 只是數據字段。 – 2010-04-20 17:22:13

+0

當數據不是來自本地對象時,我覺得這種臭味和UI背後的數據綁定背後的想法。所以在服務器端,我必須觀察是否有任何改變,然後強制客戶端重新加載對象,或者至少改變字段?這聽起來像更多的工作,而不是價值。我覺得WCF在這方面遠離了Remoting。 – zimmer62 2010-04-20 18:41:01