2010-04-20 48 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