如何将Silverlight客户端与WCF同步?

时间:2011-01-05 16:45:34

标签: silverlight wcf client-server inotifypropertychanged synchronize

这可能只是一些概念上的问题,但我似乎无法找到理想的解决方案。

我想创建一个Silverlight客户端应用程序,它使用WCF通过一些自编的Web服务来控制第三方应用程序。如果有多个Silverlight客户端,则应同步所有客户端,即应将来自一个客户端的参数更改传播到所有客户端。

我设置了一个非常简单的Silverlight GUI,它操纵传递给服务器的参数(类继承INotifyPropertyChanged):

public double Height
    {
        get { return frameworkElement.Height; }
        set
        {
            if (frameworkElement.Height != value)
            {
                frameworkElement.Height = value;
                OnPropertyChanged("Height", value);
            }
        }
    }

OnPropertyChanged负责传输数据。 WCF服务(duplex net.tcp)维护所有客户端的列表,一旦收到数据包(带有参数更改描述的XElement),它就会将此数据包转发给所有客户端,但收到数据包的客户端。

客户端收到包,但现在我不确定,在内部设置属性的最佳方法是什么。如果我使用“Height”(见上文),将生成一条新的更改消息并发送给所有其他客户a.s.o。

也许我可以使用数据字段(frameworkElement.Height)本身或函数 - 但我不确定以后是否会出现数据绑定问题。另外,我不想简单地复制部分代码属性,以防止出现冗余代码的错误。

那你会推荐什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

这里的一个常见解决方案是使用布尔值来跟踪OnPropertyChanged中的当前状态。收到WCF数据包时可以设置为true,如果是,则不进行重新广播。然后在设置属性后将其设置为false。

当您正常设置属性时,您只需将其保留为false。这将使其在内部设置时正常广播,但在通过WCF调用设置时则不会。

此选项有效,但确实需要谨慎。由于你将这个逻辑放在一个单一的点上,所以要正确起来应该是相当简单的。