代码之家  ›  专栏  ›  技术社区  ›  jheppinstall

服务引用错误:无法为服务引用生成代码

  •  130
  • jheppinstall  · 技术社区  · 14 年前

    我可以使用Web服务的URL找到它,但是当我尝试填充服务引用时,在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)。我试过分配各种访问权限,但我不确定哪个用户需要该权限,也不确定这是否只是一种逃避。

    任何想法都将不胜感激。

    谢谢

    13 回复  |  直到 11 年前
        1
  •  299
  •   Mohan Kumar    13 年前

    必须取消选中“配置服务引用”选项中所有引用程序集中的重用类型

    Check this for details

        2
  •  124
  •   Darren    11 年前

    右键单击您的服务参考并选择 Configure Service Reference...

    Configure Service Reference

    然后取消选中 Reuse types in referenced assemblies

    Reuse Types

    点击 OK ,清理并重新生成解决方案。

        3
  •  17
  •   Colin    8 年前

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

    问题的根源似乎是,我试图从中生成客户端的项目引用的程序集反过来又依赖于另一个未被引用的程序集。

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

    从服务配置中取消选中“重用引用程序集中的类型” ,但也有副作用。 存在重用类型选项是有原因的 在某些情况下,它避免了在使用服务的代码中不必要的强制转换。

    例如,如果服务本身是使用WCF构建的,并且其中的某些方法参数的类型为System.Guid,则如果禁用“重用类型”选项,则它们将转换为生成的客户端中的字符串。

    我更喜欢的选择 禁用重用类型就是从专门为此目的创建的类库项目中添加服务引用。要记住的一件事是将类库app.config中所有与服务相关的配置复制到启动项目的配置文件中。

    如果在本地程序集中定义了需要在服务客户端中重用的类型,则只需从上述类库项目中引用这些程序集及其所有依赖项。

        4
  •  3
  •   user2144589    11 年前

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

    在我的例子中,我的WPF项目在VS.Net 2008中有这个问题。读完本文后,我意识到web服务中使用的程序集是客户端上使用的程序集的不同版本。

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

        5
  •  1
  •   Aliostad    14 年前

    由于问题是由于WSDL中的错误和 如果不检查WSDL,我就不能做更多的评论。因此,如果您可以共享您的WSDL,请这样做。

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

    一般来说,我发现微软的web服务实现非常好,所以我认为web服务正在发回不可靠的WSDL。

        6
  •  0
  •   CartoJunkie    12 年前

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

    还可以删除对以下对象的引用:

    • System.ServiceModel.DomainServices.Client系统

    更新服务引用后,请确保将它们重新添加到中。

        7
  •  0
  •   Grwon    10 年前

    如上所述,可能存在两个不同的问题。我们发现WCF库的.DLL被添加为对客户端项目的引用。这反过来又造成了解析对象的问题,从而导致代码生成步骤“清空”文件。虽然取消选中“重用类型…”似乎是一个答案,但它会在新的名称空间中创建对象类型的额外定义,这些对象类型是真实类型的代理,然后会导致使用这些类型时出现各种“兼容性”问题。只有当你真的想“隐藏”一个类型时,你才应该选中这个选项。

        8
  •  0
  •   Prashant    9 年前

    同样的问题,通过在管理模式下运行Visual Studio来解决

        9
  •  0
  •   Alexei - check Codidact    9 年前

    当我遇到这个问题时 在VS2015 Professional中升级VS2010 WCF+Silverlight解决方案 . 除了自动从Silverlight 4升级到Silverlight 5之外,还更改了“服务引用重用”复选框值,生成失败。

        10
  •  0
  •   FrankyHollywood    8 年前

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

    向旧服务添加引用时,请单击“高级”,然后单击“添加Web引用”。现在链接到您的wsdl,一切都应该正常。

        11
  •  0
  •   Shahin Dohan    7 年前

    尝试更新服务引用时出现此问题(但仅在添加服务引用时出现此错误),但不希望删除“程序集重用”复选框。

    对我有用的是:

    • 删除要重用的引用程序集
    • 更新服务引用
      • 保留“在指定的引用程序集中重用类型”
      • 忽略错误,因为引用丢失了!
    • 再次添加对程序集的引用以修复错误
    • 再次更新服务引用

    我几乎准备放弃重用类型功能。。。

        12
  •  0
  •   popiandro    7 年前

    • 删除要重用的引用程序集
    • 删除项目的所有bin文件夹
      • 保留“在指定的引用程序集中重用类型”
    • 再次更新服务引用
        13
  •  0
  •   CodingYoshi    6 年前

    重新启动Visual Studio对我很有帮助。我正在使用VS 2015。