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

Web services WSDL操作和SOAP:这实际上是如何工作的?,web-services,soap,wsdl,Web Services,Soap,Wsdl,我试图弄清楚WS-SOAP服务器在接收SOAP时如何知道要执行什么操作。那么,有人能澄清一下吗 网络上有很多这样的例子: <wsdl:operation name="function1"> <wsdl:input message="function1Request"/> <wsdl:output message="function1Response"/> <wsdl:fault message="someFaul

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

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

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

好的,这在操作和输入参数类型之间存在1:1关系的情况下起作用

但是,如果我有两个输入类型相同的操作呢?大概是这样的:

   <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>
<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>
   <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的头部分指定绑定。 然而,在这种特殊情况下,绑定将基于soap主体类型进行

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

以下是更多信息的链接:


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

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

以下是更多信息的链接: