【问题标题】:WCF error: Need to exclude all but one of the following types. Only matching types can be valid referencesWCF 错误:需要排除除以下类型之一之外的所有类型。只有匹配的类型可以是有效的引用
【发布时间】:2012-09-17 15:18:18
【问题描述】:

我在使用 WCF 服务时遇到此错误。这是我使用 Microsoft Service Trace Viewer 查看错误详情时得到的错误报告:

运行 WSDL 导入扩展时引发异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:引用类型列表在命名空间“http://schemas.datacontract.org/2004/07/WorldVision.NewZealand.CIMS.Common.Entities”中包含一种以上数据协定名称为“EchoAddress”的类型。需要排除除以下类型之一之外的所有类型。只有匹配的类型可以是有效的引用: “CIMS.CrmService.EchoAddress,App_WebReferences.k4hj-nad,版本=0.0.0.0,文化=中性,PublicKeyToken=null”(匹配) “CIMS.AddressService.EchoAddress, App_WebReferences.k4hj-nad, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”(匹配)

看起来有两个名为“EchoAddress”的单独类,我使用 [DataContract] 属性将它们定义为 WCF DataContracts,它们都存在于 WorldVision.NewZealand.CIMS.Common.Entities 命名空间中。我检查过,事实并非如此。该错误还说我需要排除以下类型之一:

CIMS.CrmService.EchoAddress CIMS.AddressService.EchoAddress

但我只在 WorldVision.NewZealand.CIMS.Common.Entities 命名空间中声明了一次“EchoAddress”类。看起来这些是在“CrmService”和“AddressService”中对同一类型(EchoAddress)的引用,它们是我在主项目中作为“服务引用”引用的两个独立的 WCF 服务。

这是 EchoAddress 类的类型声明,它在一个单独的项目中声明,然后由包含实际 WCF 服务的项目引用。然后我的主项目将服务引用为服务引用:

[DataContract]
public class EchoAddress
{
    [DataMember]
    public string AddressType { get; set; }
    [DataMember]
    public Dictionary<string,string> AddressLines { get; set; }

    ...
}

我尝试了以下方法:

有什么想法吗?

【问题讨论】:

  • “引用程序集中的重用类型”绝对应该设置为 true。但是,我同意 @user544550 的观点 - 如果可能,请避免使用内置的生成服务引用。

标签: c# .net visual-studio-2010 wcf oop


【解决方案1】:

当我们的服务复杂性增加时,由于诸如此类的各种神秘问题,我们完全放弃了添加服务引用方法。原因是缺乏控制,幸灾乐祸和错误。如果您主要使用 .net world 的服务,请观看以下视频

http://www.dnrtv.com/default.aspx?showNum=122

这还将为您提供大量内部信息并帮助调试 wcf 问题。一旦你采取行动,你将永远不会回来!

【讨论】:

  • 谢谢你 - 我会看看。现在虽然我需要一个快速的解决方案或解决方法,因为该项目已经过期了。其他开发人员也在同一个项目上工作,不希望更改结构,所以我需要按原样修复这个问题。
猜你喜欢
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多