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

jhe*_*all 130 .net c# web-services visual-studio-2010 service-reference

我有一个Windows服务解决方案,我正在尝试在VS2010中向Hermes(Opensource ebms消息服务器)Web服务添加服务引用.

我可以使用它的URL找到Web服务,但是当我尝试填充服务引用时,我在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
Run Code Online (Sandbox Code Playgroud)

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

任何想法将不胜感激.

谢谢

smh*_*kmr 296

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

查看详细信息

  • 谢谢,这让我发疯了 (8认同)
  • 我全心全意地讨厌WCF. (7认同)
  • 或者,当实际需要"在引用的程序集中重用类型"时,可以从专门为此目的创建的类库项目中添加服务引用.有关其他信息,请查看我的[回复](http://stackoverflow.com/questions/3977560/service-reference-error-failed-to-generate-code-for-the-service-reference/15787234#15787234). (3认同)

Dar*_*ren 124

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

配置服务参考

然后取消选中 Reuse types in referenced assemblies

重用类型

单击OK,清理并重建您的解决方案.

  • +1因为视觉'怎么样'.谢谢 :) (16认同)
  • 非常感谢您的详细解释!! (2认同)
  • 如果我需要重用引用的程序集怎么办?我有一个项目,并选中该复选框.更新在我的机器上工作,但在同事的机器上它没有...任何线索? (2认同)

Flo*_*scu 17

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

问题的根源似乎是,我试图生成客户端的项目引用了一个程序集,而该程序集又依赖于另一个未被引用的程序集.

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

从服务配置中取消选中"在引用的程序集中重用类型" 将解决上述问题,但会产生副作用.重用类型选项是有原因的,在某些情况下,它避免了在使用服务的代码中进行不必要的转换.

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

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

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