0

这是我的问题。如果我这样调用我的回调:

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; }
}
4

2 回答 2

0

我想一个或多个类还没有准备好进行序列化

您可能需要使用属性标记类以及需要通过该属性[DataContract]的电线发送的所有成员[DataMember]

像这样:

[DataContract]
public class PurchaseOrder
{
    [DataMember]
    public Address BillTo {get; set;}
    [DataMember]
    public Address ShipTo {get; set;};
}

看看这篇 MSDN 文章:序列化和反序列化

于 2012-08-27T20:06:04.093 回答
0

事实证明,我的问题与我提供的信息几乎完全无关。我正在使用 NHibernate,在这种情况下,我忘记Detach了在我的回调中传递它之前的对象。这是实际错误(用 找到svclog):

不需要输入数据合同名称为“LocationProxy:http://schemas.datacontract.org/2004/07/”的“LocationProxy”。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

WCF 抱怨当我将标签附加到对象图时添加的神奇 NHibernate 属性。

于 2012-08-27T21:26:20.310 回答