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 类型进行。
我认为有重复的输入定义将被视为无效。
以下是包含更多信息的链接:
我想弄清楚 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 类型进行。
我认为有重复的输入定义将被视为无效。
以下是包含更多信息的链接: