WSDL 操作和 SOAP:这实际上是如何工作的?

WSDL operation and SOAP: how this actually works?

我想弄清楚 WS SOAP 服务器如何知道在接收到 SOAP 时要执行什么操作。那么,有人可以澄清以下内容吗?

网上有很多这样的例子:

   <wsdl:operation name="function1">
      <wsdl:input message="function1Request"/>
      <wsdl:output message="function1Response"/>
      <wsdl:fault message="someFault"/>
    </wsdl:operation>

<wsdl:operation name="function2">
      <wsdl:input message="function2Request"/>
      <wsdl:output message="function2Response"/>
      <wsdl:fault message="someFault"/>
    </wsdl:operation>

然后调用函数 1 的 SOAP 请求如下所示:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:function1Request xmlns:m="http://namespaces.com">
     ...
    </m:function1Request>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

因此,操作本身不会在 SOAP 中发送。它仅包含请求的有效负载。然后,我推测,服务器必须将请求类型与 WSDL 中的操作定义相匹配,以便找出实际需要调用的操作。

好的,这适用于操作和输入参数类型之间的 1 对 1 关系的情况。

但是,如果我有 2 个操作具有相同的输入类型怎么办?像这样:

   <wsdl:operation name="function1">
      <wsdl:input message="function1Request"/>
      <wsdl:output message="function1Response"/>
      <wsdl:fault message="someFault"/>
    </wsdl:operation>

<wsdl:operation name="function2">
      <wsdl:input message="function1Request"/>
      <wsdl:output message="function2Response"/>
      <wsdl:fault message="someFault"/>
    </wsdl:operation>

服务器如何知道要执行哪个操作?

它在 WSDL 的绑定部分中进行了描述。 有几种方法可以让服务器知道调用哪个操作。 例如,您可以根据 SOAP 的 header 部分指定绑定。 然而,在这种特殊情况下,绑定将基于 soap body 类型进行。

我认为有重复的输入定义将被视为无效。

以下是包含更多信息的链接:

https://msdn.microsoft.com/en-us/library/ms996486.aspx

https://www.w3.org/TR/wsdl#_bindings