这是我的问题。如果我这样叫我的回调:
clients[computerID].PrintLabelCallback(label);
通道故障,我在客户端获得了CommunicationFault异常。呼叫是一种方式在服务器端没有问题。
如果我这样称呼它:
label.EntryLocation = null;
label.EntryUser = null;
label.ResultLine = null;
label.Printer = null;
label.Type = null;
clients[computerID].PrintLabelCallback(label);
EntryLocation,EntryUser等是我定义的类。我不必废除String
,int
等基本类型。那些穿越电线而没有发生事故。似乎两侧都使用了相同的类型,所以我不确定它在哪里失败。
是什么导致这个?我该如何解决?
编辑:这是我的班级和相关领域的定义。
[DataContract(IsReference = true), JsonObject(IsReference = false), Serializable]
public partial class Label : Interfaces.IRQSObject
{
/// <summary>
/// The location where the Label was created.
/// </summary>
[DataMember(EmitDefaultValue = false)]
public virtual Location EntryLocation { get; set; }
/// <summary>
/// The user that Generated the Label
/// </summary>
[DataMember(EmitDefaultValue = false)]
public virtual User EntryUser { get; set; }
/// <summary>
/// The printer that this label will be printed out at
/// </summary>
[DataMember(EmitDefaultValue = false)]
public virtual LabelPrinter Printer { get; set; }
/// <summary>
/// The Type of the label
/// </summary>
[DataMember(EmitDefaultValue = false)]
public virtual LabelType Type { get; set; }
[DataMember(EmitDefaultValue = false)]
public virtual ResultLine ResultLine { get; set; }
}
答案 0 :(得分:0)
我认为还有一个或多个类还没有为序列化做好准备。
您可能需要使用[DataContract]
属性标记类,并且需要通过[DataMember]
attribut
像这样:
[DataContract]
public class PurchaseOrder
{
[DataMember]
public Address BillTo {get; set;}
[DataMember]
public Address ShipTo {get; set;};
}
查看此MSDN文章:Serialization and Deserialization
答案 1 :(得分:0)
事实证明,我的问题与我提供的信息几乎完全无关。我正在使用NHibernate,在这个场合我忘记了Detach
对象,然后在我的回调中传递它。这是实际错误(与svclog
一起找到):
使用数据合约名称输入'LocationProxy' 'LocationProxy:http://schemas.datacontract.org/2004/07/'不是预期的。考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。'
WCF抱怨我将标签附加到对象图时添加了神奇的NHibernate属性。