2015-12-07 2 views
0

Я пытаюсь понять, как 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> 

Как сервер узнает, какую операцию выполнить?

ответ

0

Это описано в разделе привязки WSDL. Существует несколько способов сообщить серверу, какую операцию вызывать. Вы можете указать привязку на основе раздела заголовка SOAP, например. В этом конкретном случае, однако, связывание будет производиться на основе типа тела мыла.

Я считаю, что наличие дублирующих определений ввода будет считаться недействительным.

Вот ссылки с дополнительной информацией:

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

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