我在尝试启动服务的WCF测试客户端时遇到以下错误,并让我发疯。我在网上搜索过,听起来像HeaderRecord
的DataContract名称在我的项目中存在两次。
但是,在此名称上执行“查找全部”只会显示一个实例。
有人可以帮我解决这个错误吗。我的智慧结束了......
DataContract for type 'Ryder.Enterprise.DataTransferObjects.HeaderRecord[]' cannot be added to DataContractSet since type 'System.Collections.Generic.List`1[[Ryder.Enterprise.DataTransferObjects.HeaderRecord, Ryder.Enterprise.DataTransferObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' with the same data contract name 'ArrayOfHeaderRecord' in namespace 'http://www.ABC.com/SOA/DataContracts/2014/02/17' is already present and the contracts are not equivalent.
我的项目中也没有名为ArrayOfHeaderRecord
的名称的实例。
只是为了咯咯笑,我决定将此特定调用的操作和服务合同删除到方法中,并且WCF测试客户端成功启动。当我重新签订合同时,那是我收到错误的时候,但我仍然不知道为什么???
我甚至回到了这个方法的旧版本源代码(当它出现在WCF测试客户端时),但也失败了。
我重启了我的机器,同样的事情正在发生。我不明白这个错误。即使我放回合同并且只是在我的班级中有一个“shell”,我也会得到同样的错误。
我不知道该怎么办???
在追踪我的解决方案中的所有内容之后,我发现错误是什么...... 我的类列出如下:注意不应该存在的List对象的实现。
public class HeaderRecordCollection : List<HeaderRecord>
{
private List<HeaderRecord> headerRecords;
public HeaderRecordCollection()
{
}
[DataMember(Name = "HeaderRecords")]
public List<HeaderRecord> HeaderRecords
{
get
{
return headerRecords;
}
set
{
headerRecords = value;
}
}
}
我只是删除了那里只有一个列表。从现在起只有一个对象列表,没有来自WCF的投诉!
答案 0 :(得分:1)
迟了两年,但是嘿;)
为CollectionDataContract替换属性DataContract