DataContract类在客户端未初始化

时间:2013-03-05 08:51:13

标签: wcf datacontract

我有以下课程我希望从我的WCFC#)服务发送到我的客户(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。服务端的代码似乎运行顺畅(我没有注意到调试器的任何内容)。

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

1 个答案:

答案 0 :(得分:2)

我看到了很多不同的解决方案。为了别人的缘故,我会把它们中的一些写下来+对我有用的东西:

  1. 似乎在某些情况下指定项目的顺序可以解决问题。有关详细信息,请参阅this SO question
  2. 如果您正在进行某些默认初始化,则可以使用OnSerializedOnDeserialized方法调用初始化方法。
  3. 我也尝试在我的IsRequired上使用DataMember属性,但仍未获取我的对象。
  4. DataContract属性中adding NameSpace property对我有用。显然,为了使合同被认为是相等的,您必须将DataContract上的Namespace属性设置为两侧的相同值。