带有SSL / TLS的wsdl.exe

时间:2012-06-21 16:03:52

标签: c# service https certificate wsdl.exe

我一直在尝试向提供商提供有关我在尝试使用其中一个WS时遇到的错误的更多信息。

他们让我使用wsdl.exe执行以下命令:

  

wsdl.exe / l:CS / protocol:SOAP / verbose / sharetypes https:example.com/?wsdl

我做到了,得到了: 错误:处理“https://example.oom?wsdl”时出错。    - 下载“https://example.com?wsdl”时出错。    - 请求已中止:无法创建SSL / TLS安全通道。

事情是,我有一个证书可以导航“https://example.com?wsdl”并且我认为它已正确安装。 当我尝试在IE中转到该URL时,我只需要从列表中选择证书并给它一定的权限。然后显示wsdl。 我让我的WS提供商告诉我如何告诉我命令:“使用ssl。使用此证书”。他们告诉我问我的网络团队,但我没有这样的事情,所以我问谷歌,我发现:1)启用SSL / TLS(如果这意味着转到:IE> Internet选项>高级>启用S​​SL / TLS,我做了)2)检查证书是否已安装且可用。我认为是。

谁能告诉我我该怎么办? 如何安装证书,但命令无法到达?

2 个答案:

答案 0 :(得分:7)

您是说您需要提供客户端证书才能导航到该网页?如果是这种情况,我不确定您是否可以直接使用wsdl.exe工具连接到它。

但你不需要。在IE中加载WSDL并将其另存为XML,然后将wsdl.exe指向该文件的本地副本。输出中唯一的区别是嵌入在代理类中的默认端点地址。您应该在运行时设置该值,但您始终只需编辑自动生成的C#代码并进行修复即可。实际的服务和数据合同以及实现代码将完全相同。

有一点需要注意:如果这个WSDL是由WCF生成的,那么你还有一些额外的工作要做。 WCF生成联合WSDL定义:通常有六个或更多单独的XSD文件构成整个WSDL定义。通常,连接相关信息可在一个文件中找到,而类型信息则使用以下标签从其他地方提取:

<wsdl:types>
  <xsd:schema targetNamespace="foo">
    <xsd:import schemaLocation="https://localhost/Foo.svc?xsd=xsd0" namespace="foo"/>
    <xsd:import schemaLocation="https://localhost/Foo.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
    <xsd:import schemaLocation="https://localhost/Foo.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/Foo.Model"/>
    <xsd:import schemaLocation="https://localhost/Foo.svc?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/System.Collections.ObjectModel"/>
  </xsd:schema>
</wsdl:types>

如果这是真的,您将需要做两件事来获得所需的WSDL:

  1. 下载所有引用的文件;这些将是<?include>指令或在其他XML文件中找到的<wsdl:import>标记,这将引入第二个。您需要检查每个新文件,因为通常有二级和三级导入。将所有内容放入一个文件夹中。
  2. 编辑所有这些包括删除URL的引用,并使用本地文件引用。
  3. 完成后,wsdl.exe应运行正常。 (在.NET 4.5中,内置支持动态展平WSDL文件,但在此之前你必须手动完成。)

答案 1 :(得分:3)

将wsdl下载到您的browserave文件中,然后在本地文件中使用wsdl.exe。