【问题标题】:How to use the same WSDL message defenitions in multiple functions?如何在多个函数中使用相同的 WSDL 消息定义?
【发布时间】:2012-08-08 09:12:31
【问题描述】:

在尝试调用 WSDL 定义的函数时,我遇到了一些关于来自 Visual Studio 2010 的无效定义的错误。问题是您不能在两个单独的函数中使用相同的消息定义。所以我必须在他们做同样的事情时创建多个消息定义。

例如:

<message name="Hi">
  <part name="input" type="xsd:string">
</message>
<message name="Say_hi_back">
  <part name="return" type="xsd:string">
</message>
<message name="I_hate_you">
  <part name="return" type="xsd:string">
</message>

<portType name="DataPort">
   <operation name="sayHello">
      <input message="tns:Hi"/>
      <output message="tns:Say_hi_back"/>
   </operation>
   <operation name="sayIHateYou">
      <input message="tns:Hi"/>
      <output message="tns:I_hate_you"/>
   </operation>
</portType>

现在调用任何一个函数都会给你一个错误。除非我添加一个具有完全相同部分的 Hi2,并将操作定义中的输入消息之一更改为 tns:Hi2。

这是为什么?这没有道理。我正在构建一个服务,我必须将 customerID 添加到我将要构建的所有功能中。一种用于预约的功能,一种用于付款的功能,一种用于所有人的功能。这意味着我将不得不复制消息定义 10 次并将它们命名为 getCustomerID*N*。

而且很多时候我将不得不有多个输入参数。例如,有人想要在日期 x 和日期 y 之间进行所有约会。 (这适用于所有存储的信息,如付款等。)虽然我只需要一条带有 int、日期和日期的消息。我将不得不写一个巨大的文档。

所以我的问题是是否有其他方法可以做到这一点。我只使用 WSDL 两天,而那两天充满了问题和欺骗性的“胜利”。你解决了一个问题才发现打开了下一个问题的大门。

谢谢。 :)

【问题讨论】:

    标签: soap wsdl


    【解决方案1】:

    您正在创建一个反映 RPC 样式的 WSDL,这由消息部分定义中的“类型”属性证明。我不完全确定为什么这会导致 VS 出现问题,但是 RPC 样式已经过时,取而代之的是文档样式(某些工具的现代版本完全放弃了对 RPC 的支持)。

    使用文档样式(document/literal/wrapped 是我们的标准)可能会有更好的结果。您可以在此处 (http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/) 阅读更多关于样式差异的信息。

    所需的更改并不太复杂,此站点 (http://wso2.org/library/knowledge-base/convert-rpc-encoded-wsdl-document-literal-wrapped-wsdl) 提供了一些帮助,尽管我认为作者在 #Output 消息部分翻转了他的 rpc 与文字输出定义。

    【讨论】:

    • 现在一个函数可以工作,而其他 4 个函数都返回 null :S 有什么想法吗?已经用谷歌搜索了。
    • 2 个问题:1 - 您是使用嗅探器(如 Fiddler)还是客户端来确定操作返回的内容? 2 - 各个请求是否实际上被路由到其他操作(以便您可以调试/记录/查看活动)或者消息调度程序无法选择正确的操作?如果是后者,我的第一个检查将是请求元素的完全限定名称与服务所需的名称(并希望准确地发布在 WSDL 中)。
    • 我正在使用 var dump 调试 Trough php。请看我的另一个问题。我无法发布网址,因为我在手机上。对不起。
    猜你喜欢
    • 2016-02-18
    • 2018-06-08
    • 2012-02-27
    • 2023-03-19
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多