我在使用 WCF 服务时遇到此错误。这是我使用 Microsoft Service Trace Viewer 查看错误详细信息时得到的错误报告:
运行 WSDL 导入扩展时引发异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:引用类型列表包含多个类型,在命名空间“ http://schemas.datacontract.org/2004 ”中具有数据协定名称“EchoAddress” /07/WorldVision.NewZealand.CIMS.Common.Entities '。需要排除除以下类型之一之外的所有类型。只有匹配类型可以是有效引用:“CIMS.CrmService.EchoAddress, App_WebReferences.k4hj-nad, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”(匹配)“CIMS.AddressService.EchoAddress, App_WebReferences.k4hj-nad ,版本=0.0.0.0,文化=中性,PublicKeyToken=null"(匹配)
看起来有两个名为“EchoAddress”的单独类,我使用 [DataContract] 属性将它们定义为 WCF DataContracts,它们都存在于 WorldVision.NewZealand.CIMS.Common.Entities 命名空间中。我检查过,事实并非如此。该错误还说我需要排除以下类型之一:
CIMS.CrmService.EchoAddress CIMS.AddressService.EchoAddress
但我只在 WorldVision.NewZealand.CIMS.Common.Entities 命名空间中声明了一次“EchoAddress”类。看起来这些是对同一类型(EchoAddress)的引用,在“CrmService”和“AddressService”中,它们是我在主项目中作为“服务引用”引用的两个独立的 WCF 服务。
这是 EchoAddress 类的类型声明,它在单独的项目中声明,然后由包含实际 WCF 服务的项目引用。然后我的主项目将服务引用为服务引用:
[DataContract]
public class EchoAddress
{
[DataMember]
public string AddressType { get; set; }
[DataMember]
public Dictionary<string,string> AddressLines { get; set; }
...
}
我尝试了以下方法:
- 在 VS2010 中,右键单击 WCF 服务引用 > 配置服务引用 > 从 web 服务引用配置的高级菜单中取消选中“在引用程序集中重用类型”,用于 CrmService 和 AddressService WCF 服务。
- 删除 Web 服务引用,关闭 VS2010,使用“以管理员身份运行”打开 VS2010,重新添加 Web 服务引用。
- 在整个解决方案中搜索对 EchoAddress 的重复引用
- 为所有数据类型设置 [DataContract(IsReference = false)],根据:http: //blogs.msdn.com/b/distributedservices/archive/2010/02/04/wcf-client-issue-with-reuse-types -from-referenced-assemblies.aspx
- 检查任何地方都没有标有 [DataMember] 的类成员也称为 EchoAddress'(显然,当存在这种类型的结构时会发生此错误 - 有关详细信息,请参见上面的链接)
- 检查所有项目引用,以确保没有“循环”类型引用(例如,项目 1 引用项目 2,项目 1 具有对 service1 的服务引用,项目 2 也具有对 service1 的服务引用。检查了服务引用、项目引用和'可能导致这种情况的标准 dll 引用。
- 尝试更新服务参考,重建单个项目,整个解决方案,你能想到的每一种组合!
- 尝试在调试器中单步执行 - 没有提供更多信息,只是在我尝试通过 WCF 服务写入我们的 CRM 时失败,使用 MS Dynamics CRM API 中的 OrganizationServiceContext.SaveChanges()
- 已阅读以下内容:
- http://social.msdn.microsoft.com/Forums/en/wcf/thread/6ab067fe-0607-4b6e-8ab7-a5e2db1dd490
- 此 WCF 错误是什么意思:“自定义工具警告:无法导入 wsdl:portType”
- http://www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html
- 我即将读完:
- http://marktinderholt.wordpress.com/2010/02/12/silverlight-wcf-service-reference-weirdness-solved-custom-tool-error-failed-to-generate-code-for-the-service-reference- %E2%80%98servicereference1%E2%80%99-please-check-other-error-and-warnin/
有任何想法吗?