在客户端未初始化DataContract类
问题描述:
我有下面的类,我想从我的WCF
(C#
)服务发送给我的客户(WPF
):在客户端未初始化DataContract类
[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
解决方案,但我不需要只是一个默认的构造函数)。
答
我看到了这个问题很多不同的解决方案。对于其他人的缘故,我会写下他们中的一些+对我来说什么:
- 看来,在某些情况下指定项目的顺序解决了问题。详情请参阅this SO question。
- 如果它是一些默认的初始化,您可以使用
OnSerialized
和OnDeserialized
方法调用您的初始化方法。 - 我也试过在我的
DataMember
上使用IsRequired
属性,但仍没有得到我的对象。
对我来说有效的是adding NameSpace
property,DataContract
属性。显然,为了让合约被视为相等,您必须将DataContract上的Namespace属性设置为双方相同的值。
如果可能,请使用fiddler查看Service返回的内容以及客户端收到的消息中的内容。 – jags 2013-03-05 09:29:01