如何使用 WSDL 文件创建 WCF 代理?

Posted

技术标签:

【中文标题】如何使用 WSDL 文件创建 WCF 代理?【英文标题】:How to use a WSDL File to create a WCF Proxy? 【发布时间】:2010-10-31 01:04:30 【问题描述】:

我有一个旧的 WSDL 文件,我想使用 WCF 与服务进行通信。

WSDL 是从 ASMX 生成的(我猜想但我不确定)。

与它通信所需的步骤是什么?

【问题讨论】:

不管是什么东西生成了 WSDL。 【参考方案1】:

右键单击您的项目,然后选择“添加服务引用”。指向 WSDL。单击“确定”。应该就是这些了。

【讨论】:

我找不到“浏览”按钮 - 必须在 Visual Studio 2010 中复制/粘贴 wsdl 文件的完整路径。 我没有提到“浏览”按钮。什么意思? 哦,我的意思是我已经习惯了要求您输入文件名的应用程序,这些应用程序还具有“浏览”或“...”按钮,以便您可以选择位置。 Visual Studio UI 有点误导,因为它不允许您这样做 - 您必须手动复制/粘贴 wsdl 文件的位置。知道之后就这么简单,一开始肯定很困惑。【参考方案2】:

使用 svcutil.exe 创建 WCF 代理来调用服务。详情here.

【讨论】:

好的,我试试看! Visual Studio 和 Windows SDK 中有一个文件 wsdl.exe。我用它来生成代理类,这和 svcutil.exe 一样吗?一旦我生成了代理文件,我应该如何使用这个生成代理? 不一样。 svcutil.exe 是一个为 WCF 生成代理和存根(和其他东西)的工具。 wsdl.exe 对 ASMX 执行类似操作。自 2006 年起,WCF 已取代 ASMX,成为 .NET 中首选的 Web 服务编程框架。所以,ASMX 是旧的,WCF 是新的。【参考方案3】:

wsdl.exe 是旧的 Web 服务 (1.1) 创建代理的方式。如前所述,首先要尝试的是“添加服务参考”。这使用 svcutil.exe 创建代理。如果您需要更多地控制代理的创建方式,可以从命令行使用 svcutil.exe 和各种开关。

话虽如此...我在使用较旧的 Web 服务 wsdls 时遇到了麻烦。特别是包含重载操作的旧 Apache AXIS Web 服务。请参阅我的帖子here 了解完整详情。 (我的问题还没有解决。希望你不会遇到同样的问题,如果你解决了,请回答我的问题。:)

【讨论】:

Web 服务中没有“重载”的概念。 Apache 应该知道得更多,希望他们现在已经学会了。他们还曾经做过一些有趣的事情,比如发出引用 apachesoap:XmlElement 等类型的模式,然后不定义这些类型。如果您使用 Apache 代码来使用该服务,可能效果很好,但否则就不行。 感谢您的评论,约翰。显然,WSDL 1.1 允许重载? (请参阅webservices.xml.com/pub/a/ws/2003/01/08/randyray.html)我提到的同一个服务包括一堆 svcutil 无法理解的故障类型。我花了很长时间才让它工作,并且只有在我对代理代码进行了大量编辑之后。

以上是关于如何使用 WSDL 文件创建 WCF 代理?的主要内容,如果未能解决你的问题,请参考以下文章

WCF服务中的wsdl文件在哪里

Java工具创建的WSDL文件的WCF序列化问题

WCF 生成的 wsdl 与为创建 WCF 服务而提供的原始 wsdl 不同?

能否结合来自 WCF 服务的 WSDL 和 XSD 数据?

如何更改 WCf 服务的 wsdl 文件中的默认模式位置?

ServiceRoute + WebServiceHostFactory 杀死 WSDL 生成?如何使用 ?wsdl 创建无扩展 WCF 服务