WCF回调故障取决于参数

时间:2012-08-27 19:57:32

标签: c# wcf nhibernate fluent-nhibernate wcf-callbacks

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

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等是我定义的类。我不必废除Stringint等基本类型。那些穿越电线而没有发生事故。似乎两侧都使用了相同的类型,所以我不确定它在哪里失败。

是什么导致这个?我该如何解决?

编辑:这是我的班级和相关领域的定义。

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

2 个答案:

答案 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属性。