数据签约成员互相引用时出错

时间:2015-02-09 16:32:19

标签: c# wcf datacontract datamember

我有一个简单的数据合约,它有一个相互引用的数据成员,这里是数据成员:

 [DataContract(Namespace = "", Name = "ScaleTransactionHeaderMessage")]
public class ScaleTransactionHeaderMessage
{
    [DataMember]
    public int ScaleTransactionHeaderMessageId { get; set; }

    [DataMember]
    public string OperatorName { get; set; }

    [DataMember]
    public string Shift { get; set; }

    [DataMember]
    public string Source { get; set; }

    [DataMember]
    public string Destination { get; set; }

    **[DataMember]
    public List<ScaleTransactionDetailMessage> ScaleTransactionDetailMessages { get; set; }**

}

[DataContract(Namespace = "", Name = "ScaleTransactionDetailMessage")]
public class ScaleTransactionDetailMessage
{

    [DataMember]
    public int ScaleTransactionDetailMessageId { get; set; }

    [DataMember]
    public double Tonnage { get; set; }

    [DataMember]
    public DateTime TransactionDetailDate { get; set; }

    **[DataMember]
    public ScaleTransactionHeaderMessage scaleTransactionHeaderMessage { get; set; }**

}

以下是导致问题的操作

        private static ScaleTransactionDetailMessage ConvertTransactionDetail(ScaleTransactionHeaderMessage headerMessage, ScaleTransactionDetail transactionDetail)
    {
        ScaleTransactionDetailMessage detailMessage = new ScaleTransactionDetailMessage
        {
            Tonnage = transactionDetail.Tonnage,
            TransactionDetailDate = transactionDetail.TransactionDetailDate,
            ScaleTransactionDetailMessageId = transactionDetail.TransactionDetailId,
           //TODO: Check why this is not working
            **scaleTransactionHeaderMessage = headerMessage**
        };
        return detailMessage;
    }

问题是我每次在ScaleTransactionDetailMessage数据合同中添加ScaleTransactionHeaderMessage时总是会出现提示连接超时的错误,我确定这不是配置问题,因为如果我没有将值添加到操作中的ScaleTransactionHeaderMessage合同服务可以正常运行。

我有单元测试操作并且它正常工作,只有在调用服务时才会出现问题。

数据合同设计是否有任何错误?

1 个答案:

答案 0 :(得分:1)

您需要将IsReference = true添加到DataContract

[DataContract(IsReference=true]

看看here