Я пытаюсь понять, как WS SOAP-сервер знает, какую операцию выполнить при получении SOAP. Итак, может ли кто-то разъяснить следующее?Работа WSDL и 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 для вызова function1 выглядит следующим образом:
<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>
Как сервер узнает, какую операцию выполнить?