我有以下课程我希望从我的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
。服务端的代码似乎运行顺畅(我没有注意到调试器的任何内容)。
如何在保留会员资格的同时,将DataContract
课程与WCF
一同转移?值?
(我看到了建议使用OnSerialized
和OnDeserialized
的解决方案,但我并不需要一个默认的构造函数。)
答案 0 :(得分:2)
我看到了很多不同的解决方案。为了别人的缘故,我会把它们中的一些写下来+对我有用的东西:
OnSerialized
和OnDeserialized
方法调用初始化方法。IsRequired
上使用DataMember
属性,但仍未获取我的对象。 DataContract
属性中adding NameSpace
property对我有用。显然,为了使合同被认为是相等的,您必须将DataContract上的Namespace属性设置为两侧的相同值。