在 VS2017 中无法从 WSDL 生成代理

Posted

技术标签:

【中文标题】在 VS2017 中无法从 WSDL 生成代理【英文标题】:Failing to generate proxy from WSDL in VS2017 【发布时间】:2018-07-26 11:26:24 【问题描述】:

我有一个 WSDL,我尝试从 Visual Studio 2017 中生成客户端代理。

    右键项目名称(WinForm) 添加 > 服务参考 粘贴 WSDL adr 点击确定

现在我收到 1 个错误和 20 个警告

错误

严重性代码描述项目文件行抑制状态 错误自定义工具错误:无法为服务生成代码 参考“ServiceReference1”。请检查其他错误和警告 消息 细节。 WindowsFormsApp1 c:\users\Me\source\repos\WindowsFormsApp1\WindowsFormsApp1\Connected 服务\ServiceReference1\Reference.svcmap 1

警告(其中一些)

严重性代码描述项目文件行抑制状态 警告自定义工具警告:无法导入 wsdl:port 详细信息:那里 导入 wsdl:binding 时出错,该 wsdl:port 依赖于该绑定 在。 wsdl 的 XPath:绑定: //wsdl:definitions[@targetNamespace='MyTest.GetInformation:v2']/wsdl:binding[@name='GetInformationBinding'] 错误源的 XPath: //wsdl:definitions[@targetNamespace='MyTest.GetInformation:v2']/wsdl:service[@name='GetInformationService']/wsdl:port[@name='GetInformationPort'] WindowsFormsApp1 c:\users\Me\source \repos\WindowsFormsApp1\WindowsFormsApp1\Connected 服务\ServiceReference1\Reference.svcmap 1

严重性代码描述项目文件行抑制状态 警告自定义工具警告:无法导入 wsdl:binding 详细信息:有 导入 wsdl:portType 时出错,该 wsdl:binding 是 依赖于。 wsdl:portType 的 XPath: //wsdl:definitions[@targetNamespace='MyTest.GetInformation:v2']/wsdl:portType[@name='GetInformationInterface'] 错误源的 XPath: //wsdl:definitions[@targetNamespace='MyTest.GetInformation:v2']/wsdl:binding[@name='GetInformationBinding'] WindowsFormsApp1 c:\users\Me\source\repos\WindowsFormsApp1\WindowsFormsApp1\Connected 服务\ServiceReference1\Reference.svcmap 1

严重性代码描述项目文件行抑制状态 警告 自定义工具警告:无法导入 wsdl:portType 详细信息:An 运行 WSDL 导入扩展时引发异常: System.ServiceModel.Description.XmlSerializerMessageContractImporter 错误:数据类型 'MyTest.attentionSignal:v1:II' 是 失踪。错误源的 XPath: //wsdl:definitions[@targetNamespace='MyTest.GetInformation:v2']/wsdl:portType[@name='GetInformationInterface'] WindowsFormsApp1 c:\users\Me\source\repos\WindowsFormsApp1\WindowsFormsApp1\Connected 服务\ServiceReference1\Reference.svcmap 1

SoapUI 5.3.0 可以从相同的 WSDL 生成代理,我也可以在 VS2017 中使用 Web Reference(兼容模式 2.0)生成它。然而,后面的解决方案对我不起作用,因为我有来自这个 WSDL 的 v1 的代码,我想重用。

编辑:

这是 WSDL,将其添加为 VS 2017 中的服务引用,您应该会看到问题: https://1drv.ms/u/s!AskujIssKpne6170QEQdCLrkG8-u

【问题讨论】:

【参考方案1】: 你应该使用浏览器在本地下载 wsdl 然后按照你的休息 步骤 右键项目名称(WinForm) 添加 > 服务参考 粘贴 WSDL 本地路径并单击确定

更新: 如果上述方法不起作用。您可以尝试另一种方法 - 使用以下命令通过 XSD.exe 创建 Web 代理

wsdl.exe [path To Your WSDL File] //in visual studio command line
这将生成代理类,您可以将其复制/移动到您的项目中并使用它。

【讨论】:

第一次尝试是从本地 WSDL 文件中添加服务引用,当这不起作用时,我尝试在 IIS 中托管 WSDL(因为这是我几年前所要做的) .这些方法均不适用于此 WSDL。但是,它可以通过 XML Spy 验证,并且可以在 SOAPUI 中使用。让它在 Visual Studio 中工作的唯一方法是使用兼容模式,但使用 .NET 2.0 感觉不对。 是的,我已经绑定了,但它使用了我所看到的兼容模式? @Banshee “我已经绑定了它,但它使用了我所看到的兼容模式”是什么意思? wsdl 似乎生成的代码与如果我从 VS 中的添加服务引用中选择兼容模式相同,因此它基于 .NET 2.0。我希望能够证明 WSDL 出现故障,或者将其添加为 VS 中的服务引用,就像任何其他现代 WSDL 一样。 您是否尝试过“取消选中”配置服务引用选项中的“在所有引用的程序集中重用类型”?

以上是关于在 VS2017 中无法从 WSDL 生成代理的主要内容,如果未能解决你的问题,请参考以下文章

VS2010 根据WSDL文件(java Web Service)生成.cs文件

webservice--WSDL文件生成本地的代理类

如何使用 WSDL 将用户代理添加到自动生成的肥皂客户端

Azure Devops - 无法构建从 vs2017-win2016 到 windows-latest 的管道代理

根据WSDL生成代理类方式

WSDL自动生成WebService代理类的方法