Почему WSDL вводит wsdl:message?
Почему WSDL вводит wsdl:message? А части сообщения?
Какое преимущество они могут принести прямому использованию XSD в параметрах операций (вход, выход, ошибка)?
Как они (сообщения wsdl с частями сообщения wsdl) могут быть более абстрактными, чем XSD?
Почему это не организовано, например, так:
<operation name="GetEndorsingBoarder">
<input type="xsd:string"/>
<output type="xsd:string, xsd:int, xsd:boolean"/>
<fault "type="xsd:string""/>
</operation>
2 ответа
Я понял:
Сообщения не просто указывают параметры операции.
Сообщения и их части приведены в привязках. Должна быть возможность связывать разные части по-разному:
<message name="m1">
<part name="body" element="tns:GetCompanyInfo"/>
</message>
<message name="m2">
<part name="body" element="tns:GetCompanyInfoResult"/>
<part name="docs" type="xsd:string"/>
<part name="logo" type="tns:ArrayOfBinary"/>
</message>
<portType name="pt1">
<operation name="GetCompanyInfo">
<input message="m1"/>
<output message="m2"/>
</operation>
</portType>
<binding name="b1" type="tns:pt1">
<operation name="GetCompanyInfo">
<soap:operation soapAction="http://example.com/GetCompanyInfo"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<mime:multipartRelated>
<mime:part>
<soap:body parts="body" use="literal"/>
</mime:part>
<mime:part>
<mime:content part="docs" type="text/html"/>
</mime:part>
<mime:part>
<mime:content part="logo" type="image/gif"/>
<mime:content part="logo" type="image/jpeg"/>
</mime:part>
</mime:multipartRelated>
</output>
</operation>
</binding>
Я пропустил это, так как привязки "не SOAP 'literal'" настолько редки.
XSD
описывает DATA
аспекты, например, аспекты данных вызова веб-службы, тогда как WSDL
описывает назначение веб-сервисов (вызовы методов). Обычно вы не можете определить вызовы методов только из ваших данных.
Ознакомьтесь с ответами Cheeso и Marc на создание WSDL из файла XSD
РЕДАКТИРОВАТЬ: источник
message
описывает данные, которыми обмениваются между поставщиком и потребителем веб-сервисов, и каждый веб-сервис имеет два сообщения:
1) вход: параметры веб-сервиса 2) вывод: возврат данных из веб-сервиса
каждый message
имеет ноль или более part
параметры (по одному на каждый параметр функции веб-службы) Каждый part
Параметр связывается с конкретным типом, определенным в types
элемент контейнера.
<message name="SayHelloRequest">
<part name="firstName" type="xsd:string"/>
</message>
<message name="SayHelloResponse">
<part name="greeting" type="xsd:string"/>
</message>
Здесь определены два элемента сообщения. Первый представляет сообщение запроса SayHelloRequest, а второй представляет ответное сообщение SayHelloResponse.
Каждое из этих сообщений содержит один элемент part. Для запроса часть определяет параметры функции; в этом случае мы указываем один параметр firstName. Для ответа часть определяет возвращаемые значения функции; в этом случае мы указываем одно возвращаемое значение приветствия.