您是说需要提供客户端证书才能导航到该网页吗?如果是这种情况,我不确定您是否可以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:
- 下载所有引用的文件;这些将是在另一个 XML 文件中找到的
<?include>
指令或标记,它们会引入第二个。<wsdl:import>
您需要检查每个新文件,因为通常有二级和三级导入。把所有东西都放在一个文件夹里。
- 编辑所有这些包括引用以删除 URL 并仅使用本地文件引用。
完成后,wsdl.exe
应该可以正常运行。(在 .NET 4.5 中内置了对动态展平 WSDL 文件的支持,但在此之前您必须手动进行。)