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

时间:2015-12-07 22:58:19

标签: web-services soap wsdl

我试图弄清楚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>

然后调用function1的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>

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

1 个答案:

答案 0 :(得分:0)

它在WSDL的绑定部分中描述。 有几种让服务器知道要调用哪个操作的方法。 例如,您可以根据SOAP的标头部分指定绑定。 然而,在这种特殊情况下,将根据肥皂体类型进行装订。

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

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

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

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