137

多年来,我一直在创建和使用 Web 服务,并且始终能够使用 Visual Studio 从客户端创建服务引用。我需要使用第三方服务,但他们拒绝打开安全性,因此我可以查看 wsdl 并提供服务参考。这是一项面向公众的服务,所以我认为不需要这种级别的安全性,但它就是这样。

我知道这是一个 n00b 问题,我很惭愧地问这个问题,但是当我可用的只是客户通过电子邮件发送给我的 wsdl 的物理副本时,如何在我的客户中创建等效的服务参考信息?web.config 更改,SOAP 数据上的对象层等。就像使用自动服务引用一样,我只想打开到服务的连接并开始将其与定义的对象一起使用。

据我所知,第三方服务不是 WCF,而是 SOAP。我正在使用 VS 2010 顺便说一句。在此先感谢,肯

4

3 回答 3

198

这可能是最简单的方法

  • 右键单击项目并选择“添加服务引用...”
  • 在地址:框中,输入下载/修改的 wsdl 的物理路径(C:\test\project....)。
  • 打去
于 2012-10-04T16:07:32.310 回答
85

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

1. 通过 IDE 创建它:

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

在此处输入图像描述

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

在此处输入图像描述

2. 通过命令行创建它:

打开 VS 2010 命令提示符(程序 -> Visual Studio 2010 -> Visual Studio 工具)
然后执行:

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 输出,/language:VB除了/verbose.

于 2012-10-03T14:11:55.397 回答
1

前辈展示了如何从本地文件导入,但您的 WSDL 引用一个或多个 XSD 的可能性很小,您将收到错误:

WSDL 引用错误

您必须下载所有引用的 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 文件也有可能引用 Web 地址。

像这样:

<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" />
于 2021-11-30T07:32:20.883 回答