1

我想从我的WCF( C#) 服务向我的客户 ( WPF) 发送以下课程:

[DataContract]
    public class OutputAvailableEventArgs
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public string Message { get; private set; }
        [DataMember]
        public bool IsError { get; private set; }

        public OutputAvailableEventArgs(int id) : this(id, false, "") { }

        public OutputAvailableEventArgs(int id, string output) : this(id, false, output) { }

        public OutputAvailableEventArgs(int id, bool isError, string output)
        {
            ID = id;
            IsError = isError;
            Message = output;
        }
    }

服务使用它如下:

var channel = OperationContext.Current.GetCallbackChannel<IClientCallback>();

channel.OutputAvailable(new OutputAvailableEventArgs(1, false, "some message"));

在客户端,成员获得他们的默认值。
我尝试用IsRequired属性标记它们,但现在OutputAvailable没有调用 at 客户端。服务端的代码似乎运行顺利(我没有注意到调试器有任何东西)。

如何在保持成员价值观的同时转移DataContract课程? (我看到了建议使用的解决方案,但我不需要一个默认的构造函数。)WCF
OnSerializedOnDeserialized

4

1 回答 1

2

对于这个问题,我看到了许多不同的解决方案。为了其他人,我会写下其中一些+对我有用的东西:

  1. 似乎在某些情况下指定项目的顺序可以解决问题。请参阅此 SO question以获取完整详细信息。
  2. 如果它是您所追求的一些默认初始化,您可以使用OnSerializedandOnDeserialized方法来调用您的初始化方法。
  3. 我也尝试IsRequired在我的 s 上使用该属性,DataMember但仍然没有得到我的对象。

对我有用的是在属性中添加NameSpace属性DataContract。显然,为了让合同被认为是平等的,您必须将 DataContract 上的 Namespace 属性设置为双方的相同值。

于 2013-03-05T11:23:21.420 回答