Web services WSDL操作和SOAP:这实际上是如何工作的?
我试图弄清楚WS-SOAP服务器在接收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
<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主体类型进行 我认为重复输入定义将被视为无效 以下是更多信息的链接: