【问题标题】:Error when data contract member refer each other数据合约成员相互引用时出错
【发布时间】:2015-02-09 16:32:18
【问题描述】:

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

 [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服务可以正常运行。

我对操作进行了单元测试,它工作正常,问题只在调用服务时出现。

数据合约设计是否有错误?

【问题讨论】:

    标签: c# wcf datacontract datamember


    【解决方案1】:

    您需要将IsReference = true 添加到DataContract

    [DataContract(IsReference=true]
    

    看看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 2011-06-03
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多