这个WCF错误是什么意思:“自定义工具警告:无法导入wsdl:portType”
我在我的解决scheme中创build了一个WCF服务库项目,并为此提供服务引用。 我使用类库中的服务,所以除了类库之外,还有我的WPF应用程序项目的引用。 服务设置简单 – 只有改变才能获得asynchronous服务function。
一切工作正常 – 直到我想更新我的服务参考。 它失败了,所以我最终回滚并重试,但即使这样也失败了! 因此 – 更新服务引用失败,不做任何更改。 为什么?!
我得到的错误是这样的:
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类。 那么这是什么意思? 为什么突然显示? 记住:我什至没有改变任何东西!
现在,解决这个问题的办法在这里find了 ,但没有解释这是什么意思。 所以; 在服务的“configuration服务引用”中,取消选中“引用程序集中的重用types”checkbox。 现在重build一切正常,没有问题。 但是我真的改变了什么? 这会对我的申请造成影响吗? 什么时候应该取消这个? 我确实想重用我设置了DataContract的types,但没有更多。 我仍然可以访问那些没有这个检查?
添加服务引用时,可以使用两种方式来处理服务使用的types:
- 这些types存储在一个DLL中,该DLL是从客户端和服务器应用程序引用。
- types不在客户端引用的dll中。 在这种情况下,创build服务引用的工具将在references.cs文件中创buildtypes。
有很多事情可能会出错。 我们发现,如果工具崩溃,删除服务引用有时会更快,然后重新启动。
我们已经停止使用服务参考。 对于我们控制客户和服务的项目,我们使用此屏幕录像中描述的方法。
我在这里find了我的答案: http : //www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html
长话短说:我从高级菜单中取消选中引用程序集中的重用types 。
我不知道这是否重要,但我不使用MVC,但Web窗体。
我今天也有这个问题。 我花了整整一天才发现我的错误。 希望能帮助到你。
我无法导入的类有一个cutom枚举types属性。 此属性标记为DataMember,Enum也标记为DataContract。 一切都很好。 我忘了标记每个枚举成员EnumMember。
所以我改变了
[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 }
它终于奏效了!
在添加引用的同时转到高级属性,从清单中删除“System.Window.Browser”,它解决了这个问题。
这可能听起来很奇怪,但我通过删除引用,然后closuresVisual Studio,再次重新打开它,最后再次添加引用。
我认为自定义工具的东西需要重新启动或什么的。
当它在另一个开发人员机器上工作时,我经常遇到这个错误。 尽pipe我在虚拟机中到处都是完整的pipe理员,但是我尝试closuresVisual Studio,然后以“以pipe理员身份运行”重新打开,这很神奇。
祝你好运。
closures引用程序集中的“重用types”的一个缺点是它可能会导致模糊引用的问题。 这是由于服务引用在引用.cs文件中再次创build这些对象,并且实现该服务的代码可能是从原始名称空间引用它们。
当这种情况发生时,我发现检查'指定的引用程序集中的重用types'是非常有用的,它允许我select仅含有模糊引用的types,这样可以快速解决问题。
希望它可以帮助别人。
我的WCF服务接口在一个程序集中,实现在另一个中,服务引用在另一个程序集中,与服务引用的客户端分开。 在将DataContract应用于枚举后,我收到了错误消息。 在将EnumMember应用到枚举的字段之后,问题就解决了。
如果怀疑你的服务没有任何问题(比如enums的问题,或者其他人提到的不可序列化的类),那么尝试用新的引用创build一个新的项目 。
我正在使用Silverlight 5,并试图删除并重新创build几次参考。 reference.cs
文件每次都是完全空白的,而且从创build这个文件开始,几乎就有好几年了,所以试图弄清楚服务中发生了什么变化是不可能的。
我注意到错误包含对2.0.5.0的引用。 现在我甚至不知道这是否与Silverlight版本实际相关,但是这让我想到了创build一个全新的项目,然后突然发生了一切。
警告2自定义工具警告:无法导入wsdl:portType详细信息:运行WSDL导入扩展时引发exception:System.ServiceModel.Description.DataContractSerializerMessageContractImporter错误:无法加载文件或程序集“System.Xml,Version = 2.0.5.0,文化=中立,PublicKeyToken = 7cec85d7bea7798e'或其依赖之一。 该系统找不到指定的文件。 XPath错误来源:// wsdl:定义[@targetNamespace =''] / wsdl:端口types[@ name ='IShoppingCart']
我正在看我的项目,我也有这个问题。 原来是WCF与网站上的相同DLL的不同版本。 网站有一个较新版本的DLL和该服务是引用旧版本的DLL。 一旦他们全部同步,一切运作良好。
我遇到了同样的错误。 我努力了将近一天,试图找出发生了什么问题。 对我的线索是VS正在抛出的警告。 它试图做一些映射到雅虎.Yui.Compressor.dll,一个库我已经添加和删除(因为我决定不使用它)几天前。 这是令人震惊的,因为图书馆不在那里,但不知何故,它试图引用它。
最后,我从垃圾箱中恢复这个DLL,然后我可以成功地更新我的服务引用。
对于将来的任何人,我有两个不同的方式,但是版本问题导致了同样的错误。
我有两个WCF服务和两个通过服务引用交谈的客户端应用程序。 我更新了双方的nuget包,并试图更新服务参考,并得到这个错误。
删除没有帮助。 取消选中“重新使用程序集”是不需要的,因为我需要重用它们 – 这就是重点。
最后,有两个单独的问题:
1)我相信第一个问题是一个视觉工作室caching问题。 我仔细地浏览了所有的参考资料,发现没有问题,但仍报告无法find该文件的以前的版本。 我卸载了所有nuget软件包,重新启动了visual studio,然后重新安装它们。 更新服务引用工作。
2)第二个问题是由依赖性问题引起的。 我更新了双方的nuget软件包,一切正常,但未标记的依赖不同步。 例:
Package Foo v1引用Bar v1。 可以独立更新Foo和Bar到v2而无需更新参考。 如果同时安装Foo和Bar v2,则服务参考工具将扫描Foo v2,请参阅第v1版的参考,并且因为无法find较早的版本而失败。 如果您更新每个软件包的dll版本号,只能正确报告。 Visual Studio和MSBuild在构build应用程序方面没有任何问题,但是服务引用在尝试解决所有问题时会遇到很多困难。
我希望这可以帮助别人。
从Visual Studio(VS)2010升级到2013年的解决scheme并将每个项目的.NET Framework从4更改为4.5.1后,我得到了警告。 我关上VS并重新打开,警告消失。