Wpf 此WCF错误的含义是什么;自定义工具警告:无法导入wsdl:portType;

Wpf 此WCF错误的含义是什么;自定义工具警告:无法导入wsdl:portType;,wpf,wcf,service-reference,Wpf,Wcf,Service Reference,我在我的解决方案中创建了一个WCF服务库项目,并且有对此的服务引用。我使用类库中的服务,因此除了类库之外,我还有来自WPF应用程序项目的引用。服务是直接设置的-仅更改为获取异步服务功能 一切都很好,直到我想更新我的服务引用。它失败了,所以我最终返回并重试,但它失败了!因此,更新服务引用失败,而不进行任何更改。为什么 我得到的错误是: Custom tool error: Failed to generate code for the service reference 'MyServiceRe

我在我的解决方案中创建了一个WCF服务库项目,并且有对此的服务引用。我使用类库中的服务,因此除了类库之外,我还有来自WPF应用程序项目的引用。服务是直接设置的-仅更改为获取异步服务功能

一切都很好,直到我想更新我的服务引用。它失败了,所以我最终返回并重试,但它失败了!因此,更新服务引用失败,而不进行任何更改。为什么

我得到的错误是:

Custom tool error: Failed to generate code for the service reference 
'MyServiceReference'.  Please check other error and warning messages for details.   
警告提供了更多信息:

Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: 
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in  
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the 
following types. Only matching types can be valid references: 
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
还有两条类似的警告:

Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']  
同样适用于:

Custom tool warning: Cannot import wsdl:port .. 
我觉得这一切都令人困惑。。我在客户端仪表板上没有Patient类,除了我通过服务引用获得的那个类。那么这意味着什么呢?为什么它突然出现?记住:我甚至没有改变任何事情


现在,我们找到了解决办法,但没有解释这意味着什么。所以在服务的“配置服务引用”中,我取消选中“在引用的程序集中重用类型”复选框。现在重建一切正常,没有问题。但我真正改变了什么?这会对我的申请产生影响吗?什么时候取消勾选?我确实希望重用我在其上设置了DataContract的类型,但仅此而已。我还能接触到那些没有检查的人吗

添加服务引用时,有两种方法可以处理服务使用的类型:

  • 这些类型存储在dll中,该dll从客户端和服务器应用程序引用
  • 这些类型不在客户端引用的dll中。在这种情况下,创建服务引用的工具将在references.cs文件中创建类型
有很多事情会出错。我们发现,如果工具崩溃,有时删除服务引用并重新启动会更快


我们已停止使用服务引用。对于我们可以控制客户机和服务的项目,我们使用本文中描述的方法。

在添加参考的同时转到高级属性,并从清单中删除“System.Window.Browser”,这样就解决了问题

我今天也有这个问题。我花了整整一天的时间才发现我的错误。希望能有帮助

无法导入的我的类具有cutom枚举类型属性。此属性标记为DataMember,枚举也标记为DataContract。到目前为止一切都很好。 我只是忘了将每个枚举成员标记为枚举成员

所以我改变了

[DataContract]
public enum SortMethodType
{
    Default = 0,
    Popularity = 1,
    ReleaseDate = 2,
    PublishedDate = 3,
    TranslatedTitle = 4,
    OriginalTitle = 5,
    UserRating = 6,
    Duration = 7
}
为此:

[DataContract]
public enum SortMethodType
{
    [EnumMember]
    Default = 0,
    [EnumMember]
    Popularity = 1,
    [EnumMember]
    ReleaseDate = 2,
    [EnumMember]
    PublishedDate = 3,
    [EnumMember]
    TranslatedTitle = 4,
    [EnumMember]
    OriginalTitle = 5,
    [EnumMember]
    UserRating = 6,
    [EnumMember]
    Duration = 7
}
终于成功了

我在这里找到了答案:

长话短说:我从高级菜单中取消选中了重用引用程序集中的类型



我不知道这是否重要,但我使用的不是MVC,而是Web表单。

我的WCF服务接口在一个程序集中,实现在另一个程序集中,服务引用在另一个程序集中,与服务引用的客户端分离。我在将DataContract应用于枚举后立即收到错误消息。在我将EnumMember应用于enum的字段后,问题得到了解决。

这听起来可能有点奇怪,但我通过删除引用,然后关闭Visual Studio,再次重新打开它,最后再次添加引用来修复它


我认为自定义工具需要重新启动或做些什么。

当它在另一台开发人员机器上工作时,我经常遇到这个错误。尽管我在虚拟机的任何地方都是一名全职管理员,但我尝试关闭VisualStudio,然后用“以管理员身份运行”重新打开,它神奇地工作了


祝您好运。

如果您怀疑您的服务没有任何问题(例如其他人提到的枚举或不可序列化类的问题),请尝试使用新引用创建一个新项目

我使用的是Silverlight 5,我曾多次尝试删除并重新创建引用。
reference.cs
文件每次都是完全空的,从我创建它到现在已经有好几年了,所以想弄清楚服务中发生了什么变化是不可能的

我注意到错误包含对2.0.5.0的引用。现在我甚至不知道这是否真的与Silverlight版本相关,但它让我想到了创建一个全新的项目,然后突然一切都正常了

警告2自定义工具警告:无法导入wsdl:portType详细信息:错误 运行WSDL导入扩展时引发异常: System.ServiceModel.Description.DataContractSerializerMessageCompactImporter 错误:无法加载文件或程序集'System.Xml,版本=2.0.5.0, 区域性=中性,PublicKeyToken=7cec85d7bea7798e'或其 依赖关系。系统找不到指定的文件。XPath到 错误源://wsdl:definitions[@targetNamespace='']/wsdl:port 键入[@name='IShoppingCart']


我正在检查我的项目,我遇到了同样的问题。事实证明,WCF和Web站点上相同DLL的版本不同。
网站有较新版本的DLL,服务引用的是较旧版本的DLL。一旦它们都同步了,它们就都工作得很好。

关闭“在引用的程序集中重用类型”的一个缺点是,它可能会导致引用不明确的问题。这是由于服务引用在reference.cs文件中再次创建了这些对象,而实现服务的代码可能是从原始命名空间引用它们

当出现这种情况时,我发现检查“指定引用程序集中的重用类型”非常有用,这允许我选择仅具有不明确引用的类型,这将