【问题标题】:ObservableCollection through WCF通过 WCF 的 ObservableCollection
【发布时间】:2012-10-01 15:16:32
【问题描述】:

如果服务器端的集合已更改(通过客户端操作或服务器操作),我从几天以来一直在尝试将 PropertyChanged 事件从我的 wcf 服务获取到 wcf 客户端。 必须有更好的解决方案,而不是使用回调并重新加载列表......或者?

在服务器端:(几乎就像另一个帖子中的示例) ObservableCollection and CollectionChanged event as WCF datacontract

public interface IObservableService
{
    [OperationContract(IsOneWay = false)]
    Data getData();
}
 [DataContract]
public class Data : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;
    public void Notify(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            Console.WriteLine("Notify()");
        }
    }
    private ObservableCollection<string> list;

    internal Data()
    {
        list = new ObservableCollection<string>();
        list.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(list_CollectionChanged);
    }

    void list_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        Console.WriteLine("list_CollectionChanged");
        Notify("DataList");
        Notify("Data");
    }

    [DataMember]
    public ObservableCollection<string> DataList
    {
        get
        {
            return list;
        }
        set {
            list = value;
            Console.WriteLine("set DataList");
            Notify("DataList");
            Notify("Data");
        }
    }
}

在客户端:

ObservableServiceClient client = new ObservableServiceClient();
Data data = client.getData();

到目前为止它的工作...我可以在客户端查询集合,但是当服务器集合发生更改时我没有收到“propertyChanged”?

怎么了?我的错误和误解在哪里?

【问题讨论】:

  • 我想ObservableCollection 不会自动通过 WCF 发送信息来通知更新。我建议您使用双工合同类型并调用回调方法与客户端进行通信。更多信息在这里:msdn.microsoft.com/en-us/library/ms731064.aspx。如果您需要代码方面的帮助,请告诉我。

标签: c# wcf observablecollection propertychanged


【解决方案1】:

我建议你看看SignalR。这是一个很棒的开源项目,可以帮助您立即实现实时消息传递。有适用于不同客户端的库,它们非常易于使用。

查看此快速入门。真的就是这么简单:https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

我使用了 WCF 双工回调,但取决于绑定,如果您想通过 Internet 公开您的服务,它只会让您头疼(防火墙、NAT 和 Net.Tcp IIS 要求)。我使用了DuplexHttpBinding,但它需要一些工作才能使其进入生产就绪状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多