【问题标题】:svcutil.exe generates errors while wsdl.exe runs through withoutsvcutil.exe 生成错误,而 wsdl.exe 运行时没有
【发布时间】:2011-11-22 20:25:34
【问题描述】:

我正在研究生成符合以下 WSDL 的 Web 服务:

http://assets.cdn.gamigo.com/xml/connection-service/1.0.10/account.wsdl

当我像这样使用 svcutil.exe 运行时:

svcutil.exe /language:C# /out:GamigoServices.cs http://assets.cdn.gamigo.com/xml/connection-service/1.0.10/account.wsdl

我收到以下错误:

Error: Cannot import wsdl:binding
Detail: The given key was not present in the dictionary.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://connection.ga
mes.gamigo.com/v_1_0']/wsdl:binding[@name='DefaultAccountServiceServiceSoapBindi
ng']


Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is depend
ent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://connection.ga
mes.gamigo.com/v_1_0']/wsdl:binding[@name='DefaultAccountServiceServiceSoapBindi
ng']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://connection.ga
mes.gamigo.com/v_1_0']/wsdl:service[@name='AccountService']/wsdl:port[@name='Acc
ountServicePort']

我还尝试了一个工具,Wscf:Blue,它给了我同样的错误(它是一个 WCF VS 插件,据推测,一旦我完成了这一步,它会为我做更多的事情)。

另一方面,如果我使用 wsdl.exe(我不想这样做,因为我想使用 WCF,而且据我了解,我需要使用 svcutil.exe对于 WCF,但我只是尝试使用 wsdl.exe 来缩小问题的根源),如下所示:

wsdl.exe  http://assets.cdn.gamigo.com/xml/connection-service/1.0.10/account.wsdl /serverInterface

没有错误。

我一直在尝试使用 WSDL 的本地副本(以及它引用的 types.xsd)、注释掉部分等来缩小问题范围。但是,它实际上归结为错误消息所指的确切内容,即该绑定的定义。我也用谷歌搜索过,但对这种错误的少数引用根本没有帮助。 此外,我对 wsdl.exe 似乎与该 WSDL 完美匹配这一事实感到特别困惑。我也用过 http://xmethods.net/ve2/WSDLAnalyzer.po# 验证 WSDL,没有显示错误。

所以,现在我真的不知道如何进行。由于整个问题有点时间紧迫——到下周我应该真正开始实施——我最终可能会使用 wsdl.exe 生成的代码并使用被 MS 淘汰的旧技术,但有几个(明显的)原因我宁愿不走那条路。因此,如果有人知道如何使 svcutil.exe 使用它,我将不胜感激。 我可能会补充一点,虽然我无法修改定义,但我可能能够说服该 WSDL 的发布者执行某些编辑或至少发布第二个版本以用于我的目的。

非常感谢,

最大

维也纳,

奥地利

【问题讨论】:

    标签: wcf wsdl wsdl.exe svcutil.exe


    【解决方案1】:

    第 1 步。盯着你的 WSDL 文件

    第二步。确保 wsdl:portType 与 wsdl:binding “对齐”(即所有操作都在 portType 和 binding 下以相应的方式定义)。

    第三步。感谢我在处理 svcUtil 错误(例如“字典中不存在给定键”)时提供的最佳建议 :-)

    【讨论】:

    • 2 年后仍然有用!在 wsdl:portType 我的操作下有 3 个参数输入、输出、故障。但是在 wsdl:binding 下,相同的操作只有 2 个参数输入和输出,特别是故障丢失。当我添加一个错误元素时,错误“无法导入 wsdl:绑定详细信息:字典中不存在给定的键”。不见了!
    【解决方案2】:

    Svcutil.exe 用于 WCF 服务。如果它是一个 Web 服务 wsdl.exe 可以正常工作。我认为您正在将 svcutil.exe 用于 Web 服务,所以它给出了错误。

    【讨论】:

    • 我正在遵循blogs.msdn.com/dotnetinterop/archive/2008/09/24/…中的想法和说明
    • MSDN 非常明确地指出,为了这些目的,我这些天将求助于 WCF:msdn.microsoft.com/en-US/library/a1tx28sw(v=VS.100).aspx
    • @max: wsdl.exe 可以用于 wcf 和 web 服务,但是 svcutil.exe 只能用于 wcf 服务。
    • @max:如果您想以任何方式获得 wcf 服务。使用 wsdl.exe 创建服务的代理,然后使用代理接口构建 wcf 服务。即围绕 Web 服务创建一个包装器,然后使用它。
    • 我需要做的是将上述 WSDL 规范实现为 web 服务并通过 http 公开它,但不将其托管在 IIS 中。那么,您对我将如何获取 wsdl.exe 生成的代码并通过 WCF 公开它有任何指示吗? @dhinesh
    猜你喜欢
    • 2013-08-21
    • 2017-04-28
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    相关资源
    最近更新 更多