数据合约成员互相推荐时出错
Error when data contract member refer each other
我有一个简单的数据契约,它有一个相互引用的数据成员,这里是数据成员:
[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合同服务可以 运行 正确。
我对操作进行了单元测试,它工作正常,问题只在调用服务时出现。
数据契约设计有没有错误?
您需要将 IsReference = true
添加到 DataContract
:
[DataContract(IsReference=true]
看看here.
我有一个简单的数据契约,它有一个相互引用的数据成员,这里是数据成员:
[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合同服务可以 运行 正确。
我对操作进行了单元测试,它工作正常,问题只在调用服务时出现。
数据契约设计有没有错误?
您需要将 IsReference = true
添加到 DataContract
:
[DataContract(IsReference=true]
看看here.