如何只用物理 wsdl 文件生成服务引用

多年来,我一直在创建和使用 Web 服务,并且总是能够使用 VisualStudio 从客户端创建服务引用。我有一个第三方服务,我需要工作,他们拒绝打开他们的安全,所以我可以看到的 wsdl 和服务参考。这是一个面向公众的服务,所以我不认为需要这种级别的安全,但它是什么。

我知道这是一个无关紧要的问题,我不好意思问这个问题,但是当我只能获得客户发给我的 wsdl 的物理副本时,我如何在我的客户端中创建相应的服务参考信息呢?Config 更改、 SOAP 数据上的对象层等等。就像使用自动服务引用一样,我只是想打开到服务的连接,并开始使用已定义的对象。

据我所知,第三方服务不是 WCF,而是 SOAP。顺便说一下,我用的是 VS 2010。 先说声谢谢, 肯

190525 次浏览

有两种方法可以解决这个问题。您可以使用 IDE 来生成 WSDL,也可以通过命令行来完成。

1. 通过 IDE 创建:

在解决方案资源管理器窗格中,右键单击要将“服务”添加到的项目:

enter image description here

然后,您可以输入您的服务 WSDL 的路径并点击:

enter image description here

2. 通过命令行创建:

打开 VS2010命令提示符(程序-> VisualStudio2010-> VisualStudioTools)
然后执行:

WSDL /verbose C:\path\to\wsdl

然后,WSDL.exe 将输出一个.cs 文件供您使用。

如果文件中还有其他依赖项,比如 xsd,请将这些依赖项添加到参数列表中:

WSDL /verbose C:\path\to\wsdl C:\path\to\some\xsd C:\path\to\some\xsd

如果需要 VB 输出,除了 /verbose之外,还要使用 /language:VB

这可能是最简单的方法

  • 右键单击项目并选择“ Add Service Reference...”
  • 在 Address: 框中,输入已下载/已修改的 wsdl 的物理路径(C: test project... .)。
  • 开始

前面的代码显示了如何从本地文件导入,但是您的 WSDL 有一个或多个引用 XSD 的机会很小,您将收到错误消息:

WSDL Reference Error

您必须下载所有引用的 XSD 文件,并将它们放到引用的 WSDL 所在的同一目录中。 然后,您必须手动编辑 WSDL,并将 SchemaLocation更改为本地下载的文件。

之前

  <wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd0" namespace="http://tempuri.org/" />
<xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd2" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</xsd:schema>
</wsdl:types>

之后

  <wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="tempuri.org.xsd" namespace="http://tempuri.org/" />
<xsd:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.Arrays.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</xsd:schema>
</wsdl:types>

请注意,这些下载的 XSD 文件也有可能引用网址。

像这样:

之前

<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="http://gate.somesite.local:8084/Shop/DaxService.svc?xsd=xsd2" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />

之后

<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.Arrays.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />