服务参考错误:无法为服务参考生成代码

我有一个Windows服务解决scheme,并试图在VS2010中添加一个服务引用到Hermes(Opensource ebms消息服务器)Web服务。

我可以使用它的URLfindWeb服务,但是当我尝试填充服务引用时,在Visual Studio中出现以下错误:

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'. Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler Warning 6 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://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler Warning 7 Custom tool warning: Cannot import wsdl:port Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on. XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler Warning 5 Custom tool warning: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found. XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler 

一些调查似乎表明,这是由于svcutil.exe由于没有对目录的权限(可能是c:\ windows \ temp)而无法构build代理。 我曾尝试分配各种访问权限,但我不确定哪个用户需要该权限,或者是否只是一个红鲱鱼。

任何想法将不胜感激。

谢谢

必须从“configuration服务参考”选项中取消选中所有引用的程序集中的重用types

检查这个细节

右键单击您的服务参考并selectConfigure Service Reference...

配置服务参考

然后取消选中Reuse types in referenced assemblies

重用类型

单击OK ,清理并重build您的解决scheme。

尝试从使用Visual Studio 2012的ASP .Net MVC 4.0项目生成Web服务的客户端时,也遇到了类似的错误。

问题的根源似乎是这样一个事实,即我想从中生成客户端的项目引用了一个程序集,而该程序集又依赖于另一个未被引用的程序集。

当在服务configuration中启用“引用程序集中的重用types”时,服务生成器可能会检查所有引用的程序集以获取可重用types的列表。 其中一个引用程序集引用另一个不可用的程序集可能导致生成器失败。

从服务configuration中取消选中“在引用程序集中重用types” 将解决上述问题 ,但是有副作用。 重用types选项是有原因的 ,在某些情况下,它避免了在使用服务的代码中不必要的转换。

例如,如果服务本身是使用WCF构build的,并且其中的一些方法参数是System.Guidtypes,则在重新使用types选项被禁用时,它们将被转换为生成的客户端中的string。

我更喜欢禁用重用types的另一种方法是添加专门为此目的创build的类库项目中的服务引用。 要记住的一件事是将所有与服务相关的configuration从类库的app.config复制到启动项目的configuration文件中。

如果在本地程序集中定义了需要在服务客户机中重用的types,那么只需要从上面提到的类库项目中引用那些程序集以及它们的所有依赖项。

http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647

感谢上面的文章。

在我的情况下,我在VS.Net 2008中的WPF项目中遇到了这个问题。阅读本文后,我意识到Web服务中使用的程序集是客户端上使用的程序集的不同版本。

它更新客户端上的程序集后,它工作得很好。

猜测问题是非常困难的,因为这是由于WSDL中的一个错误,并且没有检查WSDL,所以我不能进行更多的评论。 所以如果你能分享你的WSDL,请这样做。

我只能说WSDL中似乎缺less一个模式(目标命名空间为“http://service.ebms.edi.cecid.hku.hk/”)。; 包含指令被忽略时,我知道模式的问题和不同的处理。

一般来说,我发现微软的Web服务的实现相当不错,所以我认为Web服务正在发回狡猾的WSDL。

我在Silverlight 5(VS2012)中遇到同样的错误

您也可以删除对以下内容的引用:

  • System.ServiceModel.DomainServices.Client
  • System.ServiceModel.DomainServices.Client.Web

在更新服务参考之后,请务必将其添加回来。

如上所述,可能有几个不同的问题。 我们发现,WCF库的.DLL已被添加为客户端项目的参考。 这反过来又造成了解决对象的问题,从而导致文件被代码生成步骤“清空”。 虽然取消选中使用“重用types…”可能看起来像是一个答案,它会在一个新的名称空间中创build对象types的额外定义,这些对象types是实际types的代理,然后会导致各种“兼容性”问题这些types的使用。 只有当你真的想“隐藏”一种types,你应该检查这个选项。

当你不想要一个“DLL”types的依赖项“泄露”到你试图与另一个项目隔离的项目中时,隐藏这个types是合适的。 如果WCF库项目的DLL蠕动到客户端项目引用,那么你将会遇到各种奇怪的副作用,因为types定义也在DLL中。

面临同样的问题,通过以pipe理员模式运行Visual Studio解决

在VS2015 Professional中升级VS2010 WCF + Silverlight解决scheme时遇到此问题。 除了从Silverlight 4自动升级到Silverlight 5之外,服务引用重用checkbox值已更改,并且生成失败。

发生此错误时,“重用types”并不总是问题。

在添加对旧服务的引用时,请点击“高级”,然后点击“添加Web引用”。 现在链接到你的wsdl,一切都应该工作。

尝试更新我的服务引用时,出现此问题(仅在添加服务引用时才显示此错误),但不想删除程序集重用checkbox。

对我有效的是以下几点:

  • 删除我想重新使用的引用程序集
  • 更新服务参考
    • 保持“在指定的引用程序集中重用types”
    • 忽略错误,这是因为引用丢失了!
  • 再次添加对程序集的引用以修复错误
  • 再次更新服务参考

瞧,现在它实际上更新,并不会尝试删除所有我生成的代码了。

我几乎准备放弃在重用typesfunction…