Что такое файл wsdl


Как читать WSDL-файл, статья для начинающих

Здравствуйте, уважаемые гости и подписчики проекта shiftoffproblem.com. В этой статье я расскажу о том, что такое WSDL-файл, зачем он нужен и как с ним работать.

Карта статьи

Что такое WSDL

WSDL — это язык описания веб-сервиса, имеющий структуру XML. Основное назначение WSDL-файла — это интерфейс доступа к функциям сервиса, возвращаемым типам данных; путь к серверу, обрабатывающему запросы и т.д.

Путь к wsdl-файлу обычно имеет вид http://host/services/wsdl/gbdar-v2-2.wsdl

Существует множество инструментов, библиотек, предназначенных для чтения WSDL-файла.

SoapUi

Одним из таких инструментов является soapUi (скачать здесь). Установив дистрибутив, предназначенный для вашей платформы, вы сможете создать новый проект командой File/New SoapUi project. В диалоге создания нового проекта оставляем включенной галочку Create sample requests

Выполнение запросов

В новом проекте будут автоматически созданы шаблоны запросов для сервиса, описание которого содержится в wsdl-файле. Слева в дереве Вы увидите перечень функций, содержащихся в WSDL-файле.  Я раскрою функцию Replication. Внутри нее присутствует запрос Request1, дважды щелкнув по которому, мы увидим диалог с шаблоном запроса, вместо параметров по умолчанию будут проставлены знаки вопроса. Чтобы функция корректно выполнилась, необходимо заполнить все параметры, не помеченные тегом Optional, после чего нажать зеленый треугольник в верхнем левом углу диалога.

Если все параметры указаны верно, справа появится ответ сервиса на запрос.

Просмотровщик интерфейса WSDL

SoapUi предоставляет возможность просмотра параметров WSDL-файла, для этого необходимо дважды щелкнуть по наименованию интерфейса (помечен зеленой иконкой в дереве WSDL-файла, у меня — gdbar-v2-2SOAP). В диалоговом окне вы можете найти:

  • Вкладка OverView — описание общих параметров WSDL, список функций и связанных с ними действий сервера
  • Вкладка Service Endpoints — путь к серверу и прочие параметры
  • WSDL Content — дерево навигации по файлу
  • WS-I Compliance — здесь можно создать WS-I отчет по интерфейсу

Генерация документации 

SoapUi позволяет нам генерировать документацию по функциям WSDL. Для этого щелкните правой кнопкой по интерфейсу и вызовите команду Generate Documentation. В результате получим подробный мануал в html-формате.

На этом все, подписывайтесь на новые записи, оставляйте комментарии, вносите предложения по улучшению статьи.

Главная

Читайте также

shiftoffproblem.com

Как открыть WSDL файлы - Файлы с расширением WSDL

Что обозначает расширение WSDL?

автор: Jay Geater, главный писатель по вопросам технологий

Вам кто-то послал по электронной почте файл WSDL, и вы не знаете, как его открыть? Может быть, вы нашли файл WSDL на вашем компьютере и вас заинтересовало, что это за файл? Windows может сказать вам, что вы не можете открыть его, или, в худшем случае, вы можете столкнуться с соответствующим сообщением об ошибке, связанным с файлом WSDL.

До того, как вы сможете открыть файл WSDL, вам необходимо выяснить, к какому виду файла относится расширения файла WSDL.

Совет: Неправильные ассоциации файлов WSDL могут являться признаком других базовых проблем в вашей операционной системе Windows. Эти неверные записи могут также стать причиной иных сопутствующих проблем, таких как медленный запуск Windows, зависание компьютера и прочих проблем производительности ПК. Поэтому мы настоятельно рекомендуем вам просканировать свой реестр Windows на предмет неправильных ассоциаций файлов и других проблем, связанных с фрагментацией реестра.

Ответ:

Файлы WSDL имеют Web Files, который преимущественно ассоциирован с Web Services Description Language.

Иные типы файлов также могут использовать расширение файла WSDL. Если вам известны любые другие форматы файлов, использующие расширение файла WSDL, пожалуйста, свяжитесь с нами, чтобы мы смогли соответствующим образом обновить нашу информацию.

Как открыть ваш файл WSDL:

Самый быстрый и легкий способ открыть свой файл WSDL — это два раза щелкнуть по нему мышью. В данном случае система Windows сама выберет необходимую программу для открытия вашего файла WSDL.

В случае, если ваш файл WSDL не открывается, весьма вероятно, что на вашем ПК не установлена необходимая прикладная программа для просмотра или редактирования файлов с расширениями WSDL.

Если ваш ПК открывает файл WSDL, но в неверной программе, вам потребуется изменить настройки ассоциации файлов в вашем реестре Windows. Другими словами, Windows ассоциирует расширения файлов WSDL с неверной программой.

Мы настоятельно рекомендуем просканировать ваш реестр Windows на предмет неверных ассоциаций файлов и прочих проблем, связанных с реестром.

Загрузки программного обеспечения, связанные с расширением файла WSDL:

* Некоторые форматы расширений файлов WSDL можно открыть только в двоичном формате.

Скачать FileViewPro для открытия ваших файлов WSDL прямо сейчас

WSDL Multipurpose Internet Mail Extensions (MIME):

WSDL Инструмент анализа файлов™

Вы не уверены, какой тип у файла WSDL? Хотите получить точную информацию о файле, его создателе и как его можно открыть?

Теперь можно мгновенно получить всю необходимую информацию о файле WSDL!

Революционный WSDL Инструмент анализа файлов™ сканирует, анализирует и сообщает подробную информацию о файле WSDL. Наш алгоритм (ожидается выдача патента) быстро проанализирует файл и через несколько секунд предоставит подробную информацию в наглядном и легко читаемом формате.†

Уже через несколько секунд вы точно узнаете тип вашего файла WSDL, приложение, сопоставленное с файлом, имя создавшего файл пользователя, статус защиты файла и другую полезную информацию.

Чтобы начать бесплатный анализ файла, просто перетащите ваш файл WSDL внутрь пунктирной линии ниже или нажмите «Просмотреть мой компьютер» и выберите файл. Отчет об анализе файла WSDL будет показан внизу, прямо в окне браузера.

Ваш файл анализируется... пожалуйста подождите.

Имя файла:

Размер файла:

Прервать

† Инструмент анализа файлов WSDL использует компоненты стороннего программного обеспечения. Нажмите здесь, чтобы прочитать правовую оговорку.

Об авторе: Джей Гитер (Jay Geater) является президентом и генеральным директором корпорации Solvusoft — глобальной компании, занимающейся программным обеспечением и уделяющей основное внимание новаторским сервисным программам. Он всю жизнь страстно увлекался компьютерами и любит все, связанное с компьютерами, программным обеспечением и новыми технологиями.

www.solvusoft.com

Спецификация языка Web Service Description Language (WSDL) 1.1

Константин Александров, 9 декабря 2012

1. Введение

Поскольку транспортные протоколы и форматы сообщений были стандартизованы web-сообществом, появилась возможность и необходимость описания взаимодействия систем в структурированном виде. Для решения этой задачи предназначен WSDL — язык на базе XML, который описывает службу как набор конечных точек, способных обмениваться сообщениями. WSDL служит для документирования и комплексного определения деталей взаимодействия распределенных систем в виде, удобном для машинной обработки.

WSDL определяет службу [service]2, как набор конечных точек [endpoint], или портов [port]. При этом специфичные параметры реализации — формат данных, настройки транспортного протокола — отделены от определения абстрактных сообщений [message], операций [operation] и типов портов [port type], что позволяет переиспользовать эти определения. Конкретный тип порта с указанным протоколом передачи и форматом сообщений образует связывание [binding], ассоциация связывания с конкретным сетевым адресом образует порт, а множество портов образует службу. Отсюда для описания службы в WSDL используются следующие сущности:

  • Тип [type] — контейнер для описания типов данных с помощью какого-либо языка (например, XSD).
  • Сообщение [message] — абстрактное типизированное определение данных для обмена.
  • Операция [operation] — абстрактное описание поддерживаемого службой действия или функции.
  • Тип порта [port type] — абстрактный набор операций, поддерживаемых одной или несколькими конечными точками.
  • Связывание [binding] — спецификация транспортного протокола и формата данных для конкретного типа порта.
  • Порт [port] — единичная конечная точка, определенная путем задания связывания и конкретного сетевого адреса.
  • Служба [service] — множество связанных конечных точек.

Эти элементы будут детально описаны в следующем разделе. Важно отметить, что WSDL не вводит нового языка определения типов. WSDL признает потребность в развитом механизме типизации для описания формата сообщений и поддерживает спецификацию XML Schema (XSD) как каноническую систему типизации. Однако это вовсе не означает, что выбор грамматики ограничивается только одной XSD — использование других грамматик допустимо посредством использования механизма расширения.

Кроме того WSDL определяет общий механизм связывания. Он используется для ассоциации специфичных параметров протокола или формата и структуры данных с абстрактными сообщениями, операциями или конечными точками, что позволяет переиспользовать абстрактные определения.

В дополнение к описанию самого механизма определения служб эта спецификация дает введение в расширения связывания [binding extension] для следующих протоколов и форматов сообщений:

  • SOAP 1.1
  • HTTP GET / POST
  • MIME

Несмотря на то, что указанные выше расширения описываются в этом документе и наслаиваются на описание ядра механизма определения служб, никто не запрещает использовать другие расширения связывания вместе с WSDL.

1.1. Пример WSDL-документа

Ниже приведен пример WSDL для простой сетевой службы, которая предоставляет информацию о котировках на бирже. Она поддерживает одну операцию GetLastTradePrice, которая развертывается в сети с использованием SOAP 1.1 поверх HTTP-транспорта. Запрос включает аббревиатуру ценной бумаги строкового типа, а ответ — цену дробного типа.

<?xml version="1.0"?> <definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd1="http://example.com/stockquote.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace="http://example.com/stockquote.xsd" xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element> <element name="TradePrice"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema> </types> <message name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePriceRequest"/> </message> <message name="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePrice"/> </message> <portType name="StockQuotePortType"> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> </operation> </portType> <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetLastTradePrice"> <soap:operation soapAction="http://example.com/GetLastTradePrice"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="StockQuoteService"> <documentation>My first service</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location="http://example.com/stockquote"/> </port> </service> </definitions>

1.2. Соглашение об обозначениях

В этом документе используются следующие пространства имен с префиксами:

ПрефиксURI пространства именОпределение
wsdlhttp://schemas.xmlsoap.org/wsdl/Пространство имен фреймворка WSDL
soaphttp://schemas.xmlsoap.org/wsdl/soap/WSDL-пространство имен для SOAP binding
httphttp://schemas.xmlsoap.org/wsdl/http/WSDL-пространство имен для HTTP GET и POST связывания
mimehttp://schemas.xmlsoap.org/wsdl/mime/WSDL-пространство имен для MIME связывания
soapenchttp://schemas.xmlsoap.org/soap/encoding/Пространство имен для атрибутики, относящейся к кодированию (сериализации) SOAP-сообщений, определено в SOAP 1.1 [8]
soapenvhttp://schemas.xmlsoap.org/soap/envelope/Пространство имен SOAP-конверта [envelope], определено в SOAP 1.1 [8].
xsdhttp://www.w3.org/2000/10/XMLSchemaПространство имен XML схемы, определено в спецификации XSD [10]
xsihttp://www.w3.org/2000/10/XMLSchema-instanceПространство имен, ориентированное на использование в любых XML-документах для указания XSD-специфичных атрибутов, но не относящихся к непосредственному определению типов; определено в спецификации XSD [10]
tnsлюбойПо соглашению префикс tns (от «this namespace») используется для обращения к пространству имен текущего документа
остальныелюбойВсе остальные префиксы пространств имен используются только для примеров, в частности URI, начинающийся с http://example.com, используется для представления некоторого независимого от приложения URI

В текущей спецификации используется свободный синтаксис для описания XML-грамматики WSDL:

  • Вместо использования строгой грамматики типы XML-сущностей, используемые в WSDL, описываются с помощью фрагментов XML с примерами этих сущностей.
  • Имена элементов, заканчивающиеся на ... (например, <element...>), означают, что элементы или атрибуты, не имеющие значения в данном контексте, были опущены.
  • За XML-элементами и атрибутами следуют количественные квантификаторы: ? (0 или 1), * (0 или более), + (1 или более).
  • Более светлым фоном выделяются конструкции, упоминаемые впервые, либо представляющие основной интерес в контексте конкретного примера.
  • Комментарий <-- extensibility element --> указывает на то, что в этой точке возможно включение элементов расширения из другого пространства имен (соответствует ##other в XSD)
  • Примеры, начинающиеся в <?xml, содержат достаточные данные и соответствуют данной спецификации, остальные примеры являются фрагментами документов.

Для строгого формального определения грамматики WSDL в разделе A4 приведены XSD-схемы.

2. Определение службы

2.1 Структура WSDL-документа

<wsdl:definitions name="nmtoken"? targetNamespace="uri"?>

<import namespace="uri" location="uri"/>* <wsdl:documentation .... /> ? <wsdl:types> ? <wsdl:documentation .... />? <xsd:schema .... />* <-- extensibility element --> * </wsdl:types> <wsdl:message name="nmtoken">* <wsdl:documentation .... />? <part name="nmtoken" element="qname"? type="qname"?/> * </wsdl:message> <wsdl:portType name="nmtoken">* <wsdl:documentation .... />? <wsdl:operation name="nmtoken">* <wsdl:documentation .... /> ? <wsdl:input name="nmtoken"? message="qname">? <wsdl:documentation .... /> ? </wsdl:input> <wsdl:output name="nmtoken"? message="qname">? <wsdl:documentation .... /> ? </wsdl:output> <wsdl:fault name="nmtoken" message="qname"> * <wsdl:documentation .... /> ? </wsdl:fault> </wsdl:operation> </wsdl:portType> <wsdl:binding name="nmtoken" type="qname">* <wsdl:documentation .... />? <-- extensibility element --> * <wsdl:operation name="nmtoken">* <wsdl:documentation .... /> ? <-- extensibility element --> * <wsdl:input> ? <wsdl:documentation .... /> ? <-- extensibility element --> * </wsdl:input> <wsdl:output> ? <wsdl:documentation .... /> ? <-- extensibility element --> * </wsdl:output> <wsdl:fault name="nmtoken"> * <wsdl:documentation .... /> ? <-- extensibility element --> * </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="nmtoken"> * <wsdl:documentation .... />? <wsdl:port name="nmtoken" binding="qname"> * <wsdl:documentation .... /> ? <-- extensibility element --> * </wsdl:port> <-- extensibility element --> * </wsdl:service> <-- extensibility element --> * </wsdl:definitions>

Для определения службы используются шесть основных XML-элементов:

  • types служит для определения базовых типов данных, которые далее используются для определения сообщений.
  • message — для определения абстрактных сообщений, каждое из которых состоит из логических частей, определяемых с использованием какой-либо системы типизации.
  • portType — набор абстрактных операций, для каждой из которых определены типы входящих и исходящих сообщений.
  • binding — устанавливает транспортный протокол и формат данных для операций и сообщений конкретного portType.
  • port — задает адрес для конкретного связывания, тем самым определяет единичную конечную точку.
  • service используется для группировки логически связанных портов, образующих службу.

Эти элементы будут детально описаны в разделах 2.2-2.7. В завершение этого раздела будут описаны устанавливаемые WSDL правила именования документов, включения (импорта) документов с определениями, использования расширений и добавления контекстной документации.

2.1.1. Именование и включение документов

Для справочных целей WSDL-документу может быть присвоено опциональное имя, оно задается в атрибуте name типа NCNAME. Также для документа может быть задан опциональный атрибут targetNamespace типа URI, который должен содержать абсолютный URI целевого пространства имен.

WSDL позволяет ассоциировать пространство имен [namespace] с адресом размещения документа [location] с помощью конструкции import.

<definitions .... > <import namespace="uri" location="uri"/> * </definitions>

Адресация определений из подключенного документа выполняются по QName. Можно обращаться к следующим определениям импортированного документа:

  • Определения, введенные WSDL: service, port, binding, portType, message
  • Прочие определения, добавленные посредством использования механизма расширения

Области имен определений разных видов не пересекаются — так, например, допустимо существования порта и сообщения с одинаковыми именами, но имена однотипных определений должны быть уникальны в рамках WSDL-документа.

Разрешение QName в WSDL выполняется аналогично их разрешению, описанному в спецификации XML Schema.

2.1.2. Стиль составления документа

Использование элемента import позволяет разнести различные элементы определения службы по разным документам. Хорошим подходом является разделение определений в соответствии с их уровнем абстракции, что позволяет создавать более структурированные, следовательно проще читаемые, понимаемые и поддерживаемые определения служб. К тому же подход способствует переиспользованию определений всех уровней.

Доработаем определение службы из первого примера — разнесем его по трем документам: определение базовых типов данных, абстрактное определение службы и связывание абстрактного определения со специфичными параметрами формата сообщений и транспорта.

Возможности механизма импорта не ограничиваются работой с видами определений, явно установленными этой спецификацией. Любые другие определения, созданные посредством механизма расширения, могут быть переиспользованы подобным образом.

<?xml version="1.0"?> <schema targetNamespace="http://example.com/stockquote/schemas" xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element> <element name="TradePrice"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema>

<?xml version="1.0"?> <definitions name="StockQuote" targetNamespace="http://example.com/stockquote/definitions" xmlns:tns="http://example.com/stockquote/definitions" xmlns:xsd1="http://example.com/stockquote/schemas" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <import namespace="http://example.com/stockquote/schemas" location="http://example.com/stockquote/stockquote.xsd"/> <message name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePriceRequest"/> </message> <message name="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePrice"/> </message> <portType name="StockQuotePortType"> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> </operation> </portType> </definitions>

<?xml version="1.0"?> <definitions name="StockQuote" targetNamespace="http://example.com/stockquote/service" xmlns:tns="http://example.com/stockquote/service" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:defs="http://example.com/stockquote/definitions" xmlns="http://schemas.xmlsoap.org/wsdl/"> <import namespace="http://example.com/stockquote/definitions" location="http://example.com/stockquote/stockquote.wsdl"/> <binding name="StockQuoteSoapBinding" type="defs:StockQuotePortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetLastTradePrice"> <soap:operation soapAction="http://example.com/GetLastTradePrice"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="StockQuoteService"> <documentation>My first service</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location="http://example.com/stockquote"/> </port> </service> </definitions>

2.1.3. Расширение языка и связывание

Термин «связывание» в WSDL означает процесс ассоциации параметров транспорта и формата данных с абстрактными определениями, такими как сообщения, операции, типы портов. Под определенными спецификацией стандартными элементами разрешается размещать элементы расширения, представляющие специфичные технологии. Как правило, эти точки расширения используются для задания параметров транспортного протокола и формата сообщений, однако их область применения этим не ограничивается. Пространство имен элементов расширения должно быть отличным от пространства имен WSDL.

Обычно элементы расширения используются для задания параметров связывания, специфичных для применяемой технологии передачи. Чтобы различать ситуации, когда учет этих параметров является обязательным для обмена сообщениями, элемент расширения может содержать атрибут wsdl:required логического типа. Он определен в пространстве имен WSDL, значение по умолчанию — false.

Механизм расширения позволяет поддержать новые сетевые протоколы без внесения изменений в базовую спецификацию WSDL. Рекомендуется, чтобы спецификации этих протоколов и форматов также содержали определение необходимых WSDL-расширений.

2.1.4. Документирование

Для создания пользовательской документации WSDL позволяет использовать элемент wsdl:document, содержащий произвольный текст и XML-элементы («mixed content» в терминах XSD). Он может лежать под любым элементом из WSDL.

2.2 Тип

Элемент types содержит определения типов данных, соответствующих сообщениям. С целью унификации WSDL использует XSD как встроенную систему типизации и рассматривает ее как каноническую и основную.

<definitions .... > <types> <xsd:schema .... />* </types> </definitions>

Система типизации XSD может быть использована для определения типов данных в сообщениях независимо от того, будут ли сообщения передаваться в формате XML, или в каком-либо специфическом формате — в любом случае XSD-схема может быть использована для проверки структуры сообщений. Возможны случаи, когда для одного абстрактного сообщения имеются различные связывания, либо одно связывание, но не имеющее своей распространенной системы типизации. В этих случаях рекомендуется придерживаться следующих правил при описании абстрактных типов данных с помощью XSD:

  • Используйте элементную форму (не атрибутную)
  • Не используйте служебные атрибуты или элементы, специфичные для конкретного формата передачи, непосредственно не относящиеся к определению содержимого сообщения. Например, soap:root, soap:encodingStyle, xmi:id, xmi:name.
  • Типы массивов должны наследоваться от типа Array, определенного в схеме SOAP v1.1 encoding (http://schemas.xmlsoap.org/soap/encoding/), независимо от того, будет ли сообщение передаваться в виде, описанном в разделе 5 спецификации SOAP v1.1. Используйте имя типа ArrayOfXXX, где XXX — тип элементов массива. Тип элементов и размерность массива задаются через значение по умолчанию для атрибута soapenc:arrayType. На момент написания этого документа спецификация XSD не поддерживала механизма установки значения по умолчанию для атрибута, содержащего QName. Для обхода этого ограничения в WSDL был введен атрибут wsdl:arrayType, расширяющий XSD-схему, который задает значение по умолчанию. В случае внесения исправлений в XSD для поддержки такой возможности, стандартный механизм из XSD следует использовать вместо атрибута wsdl:arrayType из WSDL.
  • Используйте xsd:anyType как тип поля / параметра, который может иметь любой тип.

Однако необоснованно ожидать, что в настоящем и будущем для определения типов данных будет использоваться только одна грамматика. Поэтому WSDL позволяет подключать другие системы типизации с помощью элементов расширения. Элемент расширения может быть добавлен под элемент types — он будет служить для идентификации системы типизации и для организации контейнера для определений типов. Роль такого элемента аналогична элементу schema языка XML Schema.

<definitions ... > <types> <-- type-system extensibility element --> * </types> </definitions>

2.3 Сообщение

Сообщение состоит из одной или нескольких логических частей [part]. Каждая часть ассоциирована с типом данных с помощью атрибута типизации, набор таких атрибутов расширяемый. WSDL определяет следующие атрибуты типизации сообщений для случая использования системы типизации XSD:

  • element — ссылается на XSD-элемент по QName.
  • type — ссылается на XSD-определение simpleType или complexType по QName.

Другие атрибуты типизации сообщений могут быть определены в пространстве имен, отличном от WSDL. Элементы расширения связывания также могут использовать атрибуты типизации.

<definitions ... > <message name="nmtoken"> * <part name="nmtoken" element="qname"? type="qname"? /> * </message> </definitions>

Атрибут name элемента message должен содержать уникальное имя сообщение в рамках текущего WSDL-документа. Атрибут name элемента part — уникальное имя части в рамках сообщения.

2.3.1 Часть сообщения

Часть сообщения — это гибкий механизм для описания абстрактного логического содержимого сообщения. Связывание может ссылаться на часть по имени для указания дополнительных специфичных параметров. Например, при определении сообщения для RPC часть может соответствовать одному аргументу вызываемой процедуры. Однако часть — абстрактное определение, и для работы с ее реальным значением придется обращаться к связыванию.

Если сообщение состоит из нескольких цельных компонентов, то в WSDL его можно определить как состоящее из нескольких частей. Например, следующее сообщение состоит их платежного ордера и накладной:

<definitions .... > <types> <schema .... > <element name="PO" type="tns:POType"/> <complexType name="POType"> <all> <element name="id" type="string/> <element name="name" type="string"/> <element name="items"> <complexType> <all> <element name="item" type="tns:Item" minOccurs="0" maxOccurs="unbounded"/> </all> </complexType> </element> </all> </complexType> <complexType name="Item"> <all> <element name="quantity" type="int"/> <element name="product" type="string"/> </all> </complexType> <element name="Invoice" type="tns:InvoiceType"/> <complexType name="InvoiceType"> <all> <element name="id" type="string"/> </all> </complexType> </schema> </types> <message name="PO"> <part name="po" element="tns:PO"/> <part name="invoice" element="tns:Invoice"/> </message> </definitions>

Однако если содержимое сообщения достаточно сложное, то определение типа можно полностью перенести на уровень системы типизации. В следующем примере сообщение содержит платежный ордер, либо набор накладных:

<definitions .... > <types> <schema .... > <!-- POType и InvoiceType - типы из прошлого примера --> <complexType name="Composite"> <choice> <element name="PO" minOccurs="1" maxOccurs="1" type="tns:POType"/> <element name="Invoice" minOccurs="0" maxOccurs="unbounded" type="tns:InvoiceType"/> </choice> </complexType> </schema> </types> <message name="PO"> <part name="composite" type="tns:Composite"/> </message> </definitions>

2.3.2 Абстрактные / конкретные сообщения

Определение сообщения всегда рассматривалось как абстрактное определение содержимого. Связывание сообщения описывает соответствие между абстрактным содержимым и конкретным форматом / представлением. Однако в некоторых случаях, абстрактное определение может очень близко, или даже однозначно, соответствовать какому-либо формату. Связывание для такого формата поставляет мало дополнительной информации, либо не поставляет совсем. Однако связывание для того же сообщения, но для другого формата, может потребовать обширных данных. Поэтому без изучения связывания невозможно сказать «насколько абстрактным» является определение сообщения.

2.4 Тип порта

Тип порта — это именованный набор абстрактных операций, ссылающихся на задействованные в обмене абстрактные сообщения.

<wsdl:definitions .... > <wsdl:portType name="nmtoken"> <wsdl:operation name="nmtoken" .... /> * </wsdl:portType> </wsdl:definitions>

Атрибут name задает уникальное имя порта среди всех портов, определенных в рамках WSDL-документа. Операция именуется также с использованием атрибута name.

В WSDL имеется четыре примитива организации способа взаимодействия, которые может поддерживать конечная точка:

  • Однонаправленный запрос [one-way] — конечная точка принимает сообщение.
  • Запрос-ответ [request-response] — конечная точка принимает сообщение и отправляет связанное сообщение.
  • Просьба-ответ [solicit-response] — конечная точка отправляет сообщение и получает связанное сообщение.
  • Уведомление [notification] — конечная точка отправляет сообщение.

WSDL рассматривает эти примитивы как операции [operation]. Конечно, операции типа запрос-ответ и просьба-ответ могут быть смоделированы с использованием двух однонаправленных сообщений, однако полезно иметь такие операции как примитивы, так как:

  • Они очень распространенные и достаточно общие.
  • Сообщения могут быть связаны без необходимости ввода более сложной информации для корреляции.
  • Некоторые конечные точки могут принимать только сообщения, являющиеся ответом на синхронный запрос.
  • Простой поток может быть алгоритмически получен из этих примитивов, в случае, если желательно определение потока.

Запрос / просьба и ответ связаны в WSDL логически, а конкретный механизм их корреляции описывает связывание. Например, запрос и ответ могут быть частью одного сетевого взаимодействия, либо являться физически разными сетевыми посылками.

Хотя WSDL и поддерживает связывания для всех четырех примитивов, но определяет их только для примитивов однонаправленный запрос и запрос-ответ. Ожидается, что спецификации, определяющие протоколы для взаимодействий просьба-ответ и уведомление, также должны поставлять связывания для WSDL, что позволит использовать эти примитивы.

Операции просьба-ответ и уведомление достаточно искусственные, вносящие сложность и путаницу, но не приносящие дополнительную полезность. В них инициатором обмена сообщениями является служба: она первая отправляет уведомление или запрос-просьбу и получает ответ для обработки. Например, web-служба, реализующая операцию типа уведомление, будет технически реализована как HTTP-клиент, а ее клиент — как HTTP-сервер.

Распространения эти операции не получили, поддерживаются только теоретически на уровне спецификации. Поэтому web-службу следует разрабатывать как обработчик запросов с соответствующим использованием в ее WSDL-документе примитивов однонаправленный запрос и запрос-ответ.

2.4.1 Однонаправленный запрос

Грамматика определения операции следующая:

<wsdl:portType .... > <wsdl:operation name="nmtoken"> <wsdl:input name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType>

Элемент input задает абстрактное содержание сообщения-запроса.

2.4.2 Запрос-ответ

<wsdl:portType .... > <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType>

Элементы input и output задают абстрактное содержание запроса и ответа соответственно. Опциональные элементы fault задают абстрактное содержание сообщений об ошибках, которое могут приходить в результате выполнения операции (сверх тех, что специфичны для протокола).

Обратите внимание, что операция запрос-ответ — это абстрактное представление. Нужно рассмотреть конкретное связывание, чтобы определить, как в действительности будет передано сообщение: в рамках одного взаимодействия (также как HTTP запрос и ответ), либо в рамках двух независимых взаимодействий (например, как два разных HTTP-запроса).

2.4.3 Просьба-ответ

<wsdl:portType .... > <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType>

Элементы output и input задают абстрактное содержание запроса-просьбы и ответа соответственно. Опциональные элементы fault задают содержание возможных сообщений об ошибках. Операция просьба-ответ также является абстрактным представлением, и для определения реального способа передачи сообщений необходимо обратиться к соответствующему связыванию.

2.4.4 Уведомление

<wsdl:portType .... > <wsdl:operation name="nmtoken"> <wsdl:output name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType>

Элемент output задает абстрактное содержание сообщения-уведомления.

2.4.5 Имена элементов в рамках операции

Атрибут name элементов input и output содержит уникальное имя среди всех таких элементов в рамках типа порта.

Чтобы избежать необходимости именования всех элементов input и output WSDL предоставляет им имена по умолчанию на основе имени операции. Если не указано имя сообщения однонаправленной операции, оно будет равно по умолчанию имени операции. Если не указано имя сообщения операции запрос-ответ, либо просьба-ответ, оно будет равно имени операции с суффиксом Request / Solicit или Response соответственно.

Так как элементов fault может быть несколько, то каждый из них должен иметь имя, чтобы ссылаться на него из связывания для задания конкретного формата сообщения. Имя должно быть уникальным среди всех элементов fault в рамках операции.

2.4.6 Порядок параметров в рамках операции

На уровне операции не настраивается, будет ли она использоваться вместе с RPC-связыванием. Однако при использовании операции с RPC-связыванием полезно зафиксировать сигнатуру оригинальной функции. Для этой цели операции запрос-ответ и просьба-ответ могут содержать список имен параметров в атрибуте parameterOrder типа nmtokens. Значение атрибута — список имен частей сообщения, разделенных одиночными пробелами. Значение должно соответствовать следующим правилам:

  • Порядок имен частей сообщения должен отражать порядок параметров RPC-сигнатуры.
  • В списке нет отдельной части для указания возвращаемого значения.
  • Если имя части есть во входящем и исходящем сообщениях, это in/out-параметр удаленной процедуры.
  • Если имя части есть только во входящем сообщении, это in-параметр.
  • Если только в исходящем — out-параметр.

Обратите внимание, что эта информация служит только как «подсказка», поэтому может быть безопасно проигнорирована в случае незаинтересованности в RPC-сигнатуре. Кроме того она является необязательной даже в случае использования операции с RPC-связыванием.

2.5 Связывание

Связывание определяет формат сообщений и детали протокола для операций и сообщений конкретного типа порта. Одному типу порта могут соответствовать несколько разных связываний. Грамматика определения связывания следующая:

<wsdl:definitions .... > <wsdl:binding name="nmtoken" type="qname"> * <-- extensibility element (1) --> * <wsdl:operation name="nmtoken"> * <-- extensibility element (2) --> * <wsdl:input name="nmtoken"? > ? <-- extensibility element (3) --> </wsdl:input> <wsdl:output name="nmtoken"? > ? <-- extensibility element (4) --> * </wsdl:output> <wsdl:fault name="nmtoken"> * <-- extensibility element (5) --> * </wsdl:fault> </wsdl:operation> </wsdl:binding> </wsdl:definitions>

Атрибут name задает имя связывания, уникальное среди всех связываний WSDL-документа. Связывание ссылается на тип порта с помощью атрибута type типа QName (см. Раздел 2.1.2).

Элементы расширения связывания используются для указания конкретной грамматики для входящих (3) и исходящих (4) сообщений, сообщений об ошибках (5). Также может указываться информация уровня операции (2) и уровня связывания (1).

Элемент связывания operation содержит данные для одноименной операции связанного типа порта. Однако имя операции в общем случае не является уникальным (пример: перегрузка методов / функций — использование одинаковых имен с различными сигнатурами), потому его может быть недостаточно для однозначного определения целевой операции типа порта. В таких случаях целевая операция адресуется с помощью дополнительного задания соответствующих имен элементов wsdl:input и wsdl:output с помощью атрибута name.

Связывание должно устанавливать только один протокол.

Связывание не должно содержать информации об адресе.

2.6 Порт

Порт определяет отдельную конечную точку посредством установки адреса для связывания.

<wsdl:definitions .... > <wsdl:service .... > * <wsdl:port name="nmtoken" binding="qname"> * <-- extensibility element (1) --> </wsdl:port> </wsdl:service> </wsdl:definitions>

Атрибут name задает уникальное имя среди всех портов в рамках WSDL-документа. Атрибут binding типа QName содержит ссылку на связывание (см. Раздел 2.1.2).

Элементы расширения (1) используются для задания адреса.

Порт не должен задавать более одного адреса.

Порт не должен содержать любую информацию связывания, отличную от адреса.

2.7 Служба

Служба объединяет вместе набор связанных портов.

<wsdl:definitions .... > <wsdl:service name="nmtoken"> * <wsdl:port .... />* </wsdl:service> </wsdl:definitions>

Атрибут name задает уникальное имя среди всех служб, определенных в рамках WSDL-документа.

Порты внутри службы связаны следующим образом:

  • Порты не взаимодействуют друг с другом (т.е. выход одного порта не является входом другого).
  • Если служба имеет несколько портов, которые разделяют общий тип порта, но используют разные связывания, либо имеют различные адреса, такие порты являются альтернативными. Каждый такой порт реализует логически эквивалентное поведение (в рамках ограничений транспорта и формата сообщений, накладываемых соответствующим связыванием). Это позволяет клиенту выбирать конкретный порт для обмена на основе некоторых критериев (поддержка транспортного протокола и т.д.).
  • Рассмотрев порты, можно определить поддерживаемые службой типы портов. На основе этих данных клиент может определить возможность взаимодействия с конкретной службой. Это полезно, если подразумевается связь между операциями из разных типов портов, и для выполнения определенной задачи требуется поддержка службой всех необходимых типов портов.
  1. Это вольный, частичный, дополненный перевод документа Web Services Description Language (WSDL) 1.1 от 15 Марта 2001
  2. Несклоняемыми написанными латиницей терминами оперировать крайне неудобно, к тому же они однозначно переводятся. Поэтому исходное имя дается только при введении нового термина, а далее по тексту будет использоваться русский перевод.

www.zahodi-ka.ru

WSDL Краткое пособие

WSDL расшифровывается Web Services Description Language. Это стандартный формат для описания веб-сервиса. WSDL был разработан совместно Microsoft и IBM.

Особенности WSDL

  • WSDL представляет собой протокол XML на основе обмена информацией в децентрализованной и распределенной среде.

  • определения WSDL описывают, как получить доступ к веб-сервиса, и какие операции он будет выполнять.

  • WSDL является языком для описания того, как взаимодействовать с сервисами XML на основе.

  • WSDL является неотъемлемой частью универсальной Описание, обнаружения и интеграции (UDDI) , в XML-основе во всем мире бизнес - реестра.

  • WSDL является язык, который использует UDDI.

  • WSDL произносится как «Wiz-тусклый» и прописана как «WSDL».

Использование WSDL

WSDL часто используется в комбинации с SOAP и XML-схемы для предоставления веб-сервисов через Интернет. Клиентская программа подключения к веб-сервиса можно прочитать WSDL, чтобы определить, какие функции доступны на сервере. Любые специальные типы данных, используемые встраиваются в файле WSDL в виде XML-схемы. Затем клиент может использовать SOAP на самом деле вызвать одну из функций, перечисленных в WSDL.

История WSDL

WSDL 1.1 был представлен как W3C Записка Ariba, IBM и Microsoft для описания сервисов для W3C XML Activity в XML-протоколов в марте 2001 года.

WSDL 1.1 не был одобрен World Wide Web Consortium (W3C) , однако он только что выпустил проект для версии 2.0 , которая будет рекомендацией (an official standard) , и , таким образом , одобрен W3C.

WSDL ломает веб-службы на три конкретные, идентифицируемые элементы, которые могут быть объединены или повторно использовать один раз определены.

Три основных элемента WSDL, которые могут быть определены отдельно, являются:

  • Типы
  • операции
  • переплет

WSDL-документ имеет различные элементы, но они содержатся в пределах этих трех основных элементов, которые могут быть разработаны в виде отдельных документов, а затем они могут быть объединены или повторно использованы, чтобы сформировать полные файлы WSDL.

Элементы WSDL

WSDL-документ содержит следующие элементы:

  • Definition : Это корневой элемент всех WSDL документов. Он определяет имя веб-службы, объявляет несколько пространств имен, используемых в оставшейся части документа, и содержит все элементы обслуживания, описанные здесь.

  • Data types : типы данных , которые будут использоваться в сообщениях в виде схем XML.

  • Message : Это абстрактное определение данных в форме сообщений представлено либо как весь документ или аргументы , которые будут отображены на вызов метода.

  • Operation : Это абстрактное определение операции для сообщения, такие как метод именования, очереди сообщений, или бизнес - процесс, который будет принимать и обрабатывать сообщения.

  • Port type : Это абстрактный набор операций отображаются на один или несколько конечных точки, определяющий набор операций для связывания; совокупность операций, как это является абстрактным, может быть отображена на несколько транспортных посредством различных привязок.

  • Binding : Это конкретные протоколы и форматы данных для операций и сообщений , определенных для конкретного типа порта.

  • Port : Это сочетание привязки и сетевой адрес, обеспечивая целевой адрес служебной связи.

  • Service : Это коллекция связанных конечных точек , охватывающих определение сервисов в файле; услуги карты привязки к порту и включают в себя любые определения расширяемости.

В дополнение к этим основным элементам, спецификация WSDL также определяет следующие служебные элементы:

  • Documentation: Этот элемент используется для предоставления документации удобочитаемой и может быть включен в любом другом WSDL элемента.

  • Import : Этот элемент используется для импорта других WSDL документов или XML - схемы.

NOTE: WSDL части обычно генерируются автоматически с помощью веб-сервисов , знающих инструменты.

Структура WSDL-документа

Основная структура документа WSDL выглядит следующим образом:

<definitions> <types> definition of types........ </types> <message> definition of a message.... </message> <portType> <operation> definition of a operation....... </operation> </portType> <binding> definition of a binding.... </binding> <service> definition of a service.... </service> </definitions>

WSDL-документ может также содержать другие элементы, такие как элементы расширения и сервисного элемента, что позволяет сгруппировать определений нескольких веб-сервисов в одном WSDL документа.

Продолжать дальше, чтобы проанализировать пример WSDL документа.

Ниже приведен WSDL-файл, который предусмотрен для демонстрации простой программы WSDL.

Предположим , служба предоставляет единую общедоступную функцию, которая называется sayHello . Эта функция ожидает один параметр строки и возвращает одну строку приветствия. Например, если вы передаете параметр world , то сервисная функция sayHello возвращает приветствие, "Hello, world!" ,

пример

Содержание HelloService.wsdl файла:

<definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message> <portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType> <binding name="Hello_Binding" type="tns:Hello_PortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="sayHello"> <soap:operation soapAction="sayHello"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </output> </operation> </binding> <service name="Hello_Service"> <documentation>WSDL File for HelloService</documentation> <port binding="tns:Hello_Binding" name="Hello_Port"> <soap:address location="http://www.examples.com/SayHello/"> </port> </service> </definitions>

Пример анализа

  • Definitions : HelloService

  • Type : Использование встроенных типов данных , и они определены в XMLSchema.

  • Message :

    • sayHelloRequest: параметр ПгвЬЫата
    • sayHelloresponse: приветствие возвращаемого значения
  • Port Type : SayHello operation , которая состоит из запроса и ответа службы.

  • Binding : Направление использовать SOAP HTTP транспортный протокол.

  • Service : Услуги доступны в http://www.examples.com/SayHello/

  • Port : Связывает связывание с URI http://www.examples.com/SayHello/ , где работает услуга может быть доступна.

<definitions> элемент должен быть корневым элементом всех WSDL документов. Он определяет имя веб-службы.

Вот кусок кода из последней главы , которая использует definitions элементов.

<definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ................................................ </definitions>

Из приведенного выше примера, мы можем заключить, что определения:

  • представляет собой контейнер из всех других элементов.

  • указывает , что этот документ называется HelloService .

  • определяет targetNamespace атрибут. targetNamespace пространство является условностью XML - схемы , которая позволяет документ WSDL ссылаться на себя. В этом примере мы определили targetNamespace из http://www.examples.com/wsdl/HelloService.wsdl

  • определяет пространство имен по умолчанию: XMLNS = HTTP: //schemas.xmlsoap.org/wsdl/. Все элементы без префикса пространства имен, таких как message или portType , поэтому считаются частью пространства имен по умолчанию WSDL.

  • определяет множество имен, которые используются на протяжении оставшейся части документа.

NOTE: Спецификация пространства имен не требуется документ , чтобы присутствовать на данном месте. Важным моментом является то, что вы задаете значение, которое является уникальным, отличным от всех других пространств имен, которые определены.

Веб-сервис должен определить свои входы и выходы, и как они отображаются в и из услуг. WSDL <types> элемент ухаживает определения типов данных, которые используются веб - службы. Типы являются XML-документы или части документов.

  • Типы элемент описывает все типы данных, используемых между клиентом и сервером.

  • WSDL не привязан исключительно к конкретной системе печати.

  • WSDL использует спецификацию W3C XML Schema в качестве своего выбора по умолчанию для определения типов данных.

  • Если служба использует только XML - схемы встроенный в простых типов, таких как строки и целые числа, то types элементов не требуется.

  • WSDL позволяет типы должны быть определены в отдельных элементов, так что типы могут быть использованы повторно с несколькими веб-сервисов.

Вот фрагмент кода, взятый из спецификации W3C. Этот код иллюстрирует , как types элементов могут использоваться в WSDL.

<types> <schema targetNamespace="http://example.com/stockquote.xsd" xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element> <element name="TradePrice"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema> </types>

Типы данных решить проблему identifing типы данных и форматы, которые Вы собираетесь использовать с веб-службами. Тип обмен информацией между отправителем и получателем. Поэтому получатели сообщений должны иметь доступ к информации, который вы использовали для кодирования данных и должны понимать, как декодировать данные.

  • <message> элемент описывает данные , которыми обмениваются между поставщиками веб - услуг и потребителей.

  • Каждый веб-служба имеет два сообщения: вход и выход.

  • Вход описывает параметры для веб-службы, а выход описывает возвращаемые данные из веб-службы.

  • Каждое сообщение содержит ноль или более <part> параметров, по одному для каждого параметра функции веб - службы.

  • Каждый <part> ассоциатов параметров с конкретным типом , определенным в <types> элементе контейнер.

Возьмем кусок кода из WSDL Пример главы:

<message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message>

Здесь определены два элемента сообщения. Первый представляет собой сообщение с запросом на SayHelloRequest , а второй представляет собой сообщение ответа SayHelloResponse .

Каждое из этих сообщений содержит одну часть элемента. По желанию, часть определяет параметры функции; в этом случае мы указываем один firstName параметр. Для ответа, часть определяет значения функции возврата; в этом случае мы указываем один приветствие возвращаемое значение.

<portType> элемент сочетает в себе несколько элементов сообщения , чтобы сформировать полный одностороннюю или операцию туда-обратно.

Например, <portType> можно комбинировать один запрос и одно ответное сообщение в одной операции запроса / ответа. Это наиболее часто используется в SOAP-услуг. PortType может определять несколько операций.

Возьмем кусок кода из WSDL Пример главы:

<portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType>
  • Элемент PortType определяет одну операцию, которая называется sayHello .

  • Операция состоит из входного сообщения одного SayHelloRequest и

  • Выход сообщение SayHelloResponse .

Модели работы

WSDL поддерживает четыре основные модели работы:

В одну сторону

Служба принимает сообщение. Поэтому операция имеет один input элемент. Грамматика для работы однонаправленной является:

<wsdl:definitions .... > <wsdl:portType .... > * <wsdl:operation name="nmtoken"> <wsdl:input name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType > </wsdl:definitions>

Ответ на запрос

Служба принимает сообщение и отправляет ответ. Таким образом , операция имеет один input элемент, за которым следует один output элемент. Для того, чтобы инкапсулировать ошибки, необязательный fault элемент также может быть указан. Грамматики для операции запрос-ответ является:

<wsdl:definitions .... > <wsdl:portType .... > * <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType > </wsdl:definitions>

Запрашивать-ответ

Служба посылает сообщение и получает ответ. Таким образом , операция имеет один output элемент, за которым следует один input элемент. Для того, чтобы инкапсулировать ошибки, необязательный fault элемент также может быть указан. Грамматики для операции SOLICIT-реакция:

<wsdl:definitions .... > <wsdl:portType .... > * <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType > </wsdl:definitions>

уведомление

Служба отправляет сообщение. Таким образом , операция имеет один output элемент. Ниже грамматика для операции уведомления:

<wsdl:definitions .... > <wsdl:portType .... > * <wsdl:operation name="nmtoken"> <wsdl:output name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType > </wsdl:definitions>

<binding> элемент обеспечивает конкретную информацию о том , как portType операция будет фактически передается по проводам.

  • Крепления могут быть доступны через несколько транспортов, включая HTTP GET, HTTP POST или SOAP.

  • Привязки предоставить конкретную информацию о том , что протокол используется для передачи portType операций.

  • Привязки предоставить информацию, где находится служба.

  • Для протокола SOAP, связывание является <soap:binding> , а также транспорт SOAP сообщений поверх протокола HTTP.

  • Можно указать несколько привязок для одного portType .

Связывание элемент имеет два атрибута: name и type атрибута.

<binding name="Hello_Binding" type="tns:Hello_PortType">

name атрибут определяет имя связывания, и type точки атрибута в порт для связывания, в данном случае "tns:Hello_PortType" порт.

SOAP Binding

WSDL 1.1 включает встроенные расширения для SOAP 1.1. Это позволяет указать SOAP конкретные детали, включая SOAP заголовки, стили кодирования SOAP, и заголовок SOAPAction HTTP. Элементы расширения SOAP включают в себя следующее:

  • мыло: связывание
  • мыло: операция
  • мыло: тело

мыло: связывание

Этот элемент указывает на то, что связывание будут доступны через SOAP. style атрибута указывает на общий стиль формата SOAP сообщения. Значение стиля rpc определяет формат RPC.

transport атрибут указывает на перенос сообщений SOAP. Значение http://schemas.xmlsoap.org/soap/http указывает на SOAP HTTP транспорта, в то время как http://schemas.xmlsoap.org/soap/smtp указывает на SOAP-SMTP транспорт.

мыло: операция

Этот элемент указывает, что связывание конкретной операции в конкретной реализации SOAP. soapAction атрибут указывает , что заголовок HTTP SOAPAction использоваться для идентификации услуги.

мыло: тело

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

Вот кусок кода из примера главы:

<binding name="Hello_Binding" type="tns:Hello_PortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/ > <operation name="sayHello"> <soap:operation soapAction="sayHello"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </output> </operation> </binding>

<port> элемент определяет индивидуальную конечную точку, указав один адрес для привязки.

Вот грамматика указать порт:

<wsdl:definitions .... > <wsdl:service .... > * <wsdl:port name="nmtoken" binding="qname"> * <-- extensibility element (1) --> </wsdl:port> </wsdl:service> </wsdl:definitions>
  • Элемент порт имеет два атрибута: name и binding .

  • name атрибут обеспечивает уникальное имя среди всех портов , определенных в документе вшита WSDL.

  • binding атрибут относится к связыванию с использованием связывающих правил , определенных WSDL.

  • Связующие элементы растяжимости используются для указания информации об адресе для порта.

  • Порт не должен указывать более одного адреса.

  • Порт НЕ ДОЛЖНЫ указать любую информацию о связывании, кроме адресной информации.

Вот кусок кода из примера главы:

<service name="Hello_Service"> <documentation>WSDL File for HelloService</documentation> <port binding="tns:Hello_Binding" name="Hello_Port"> <soap:address location="http://www.examples.com/SayHello/"> </port> </service>

<service> элемент определяет порты , поддерживаемые службой Wweb. Для каждого из поддерживаемых протоколов, есть один порт элемент. Сервисный элемент представляет собой набор портов.

  • Клиенты веб-служб можно узнать следующее из элемента службы:

    • где получить доступ к службе,
    • через какой порт для доступа к веб-службы, и
    • как определяются информационные сообщения.
  • Элемент службы включает в документации элемент для обеспечения читаемого человека документации.

Вот кусок кода из примера главы:

<service name="Hello_Service"> <documentation>WSDL File for HelloService</documentation> <port binding="tns:Hello_Binding" name="Hello_Port"> <soap:address location="http://www.examples.com/SayHello/"> </port> </service>

В binding атрибутах port элемента ассоциировать адрес службы с скрепляющим элементом , определенным в вебе - службе. В этом примере, это Hello_Binding

<binding name="Hello_Binding" type="tns:Hello_PortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="sayHello"> <soap:operation soapAction="sayHello"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </output> </operation> </binding>

Мы рассмотрели основы WSDL в этом учебнике. Следующим шагом является изучение SOAP, UDDI и Web Services.

веб-сервисы

Веб - сервисы открытый стандарт ( XML, SOAP, HTTP, etc.) веб - приложений , которые взаимодействуют с другими веб - приложениями с целью обмена данными.

Чтобы узнать больше о веб - служб, посетите Web Services Tutorial.

UDDI

UDDI является стандартом XML на основе описания, публикации и поиска веб-служб.

Чтобы узнать больше о UDDI, посетите UDDI Учебное пособие.

МЫЛО

SOAP представляет собой простой XML на основе протокола, который позволяет приложениям обмениваться информацией по протоколу HTTP.

Чтобы узнать больше о SOAP, посетите SOAP Tutorial.

Если вы заинтересованы в листинг вниз вашей компании, веб-сайт или книги в качестве WSDL ресурса, пожалуйста, свяжитесь в [email protected]

Список WSDL спецификации

www.w3ii.com

Инструмент языка описания веб-служб (Wsdl.exe)

Параметр Описание

/appsettingurlkey:ключ

или

/urlkey:ключ

Указывает ключ конфигурации, используемый для чтения значения по умолчанию для свойства URL при создании кода. При использовании параметра /parameters это значение является элементом <appSettingUrlKey> и содержит строку.

/appsettingbaseurl:базовый_URL-адрес

или

/baseurl:базовый_URL-адрес

Указывает базовый URL, используемый при вычислении фрагмента URL-адреса. Программа вычисляет фрагмент URL-адреса путем преобразования относительного URL-адреса, заданного с помощью аргумента базовый URL-адрес, в URL-адрес в документе WSDL. Вместе с этим параметром необходимо задать параметр /appsettingurlkey. При использовании параметра /parameters это значение является элементом <appSettingBaseUrl> и содержит строку.

/d[omain]:домен

Задает имя домена, используемого при подключении к серверу, требующему проверку подлинности. При использовании параметра /parameters это значение является элементом <domain> и содержит строку.

/l[anguage]:язык

Указывает язык, используемый для создания прокси-класса. В качестве аргумента, задающего язык, можно указать CS (C#, используется по умолчанию), VB (Visual Basic), JS (JScript) или VJS (Visual J#). Также можно указать полное имя класса, реализующего класс System.CodeDom.Compiler.CodeDomProvider. При использовании параметра /parameters это значение является элементом <language> и содержит строку.

/n[amespace]:пространство_имен

Задает пространство имен для созданного прокси или шаблона. Пространство имен по умолчанию — глобальное пространство имен. При использовании параметра /parameters это значение является элементом <namespace> и содержит строку. Этот элемент должен содержаться в файле параметров.

/nologo

Отключает отображение эмблемы Майкрософт при запуске. При использовании параметра /parameters это значение является элементом <nologo> и содержит либо true, либо false.

/order

Генерирует явные идентификаторы порядка для примитивных членов.

/o[ut]:имя_файла или имя_каталога

Задает путь к файлу (или каталогу), в котором сохраняется созданный код прокси. Также можно указать каталог, в котором требуется создать этот файл. По умолчанию в качестве имени файла программа использует имя XML-веб-службы. Программа сохраняет сгенерированные наборы данных в различных файлах. При использовании параметра /parameters это значение является элементом <out> и содержит строку.

/parameters

Считывает параметры командной строки из указанного файла XML. Этот параметр используется, когда требуется передать программе Wsdl.exe большое количество параметров одновременно. Краткая форма: /par:. Элементы параметров содержатся в элементе <wsdlParameters xmlns="http://microsoft.com/webReference/">. Подробные сведения см. в разделе «Заметки».

/parsableerrors

Отображает ошибки в формате, аналогичном используемому компиляторами языков в отчетах об ошибках. При использовании параметра /parameters это значение является элементом <parsableerrors> и имеет значение либо true, либо false.

/p[assword]:пароль

Задает пароль, используемый при подключении к серверу, требующему проверку подлинности. При использовании параметра /parameters это значение является элементом <password> и содержит строку.

/protocol:протокол

Указывает реализуемый протокол. Можно указать протокол SOAP (по умолчанию), HttpGet, HttpPost или пользовательский протокол, указанный в файле конфигурации. При использовании параметра /parameters это значение является элементом <protocol> и содержит строку.

/proxy:URL-адрес

Задает URL-адрес прокси-сервера, используемого для HTTP-запросов. По умолчанию используются системные настройки прокси-сервера. При использовании параметра /parameters это значение является элементом <proxy> и содержит строку.

/proxydomain:домен

или

/pd:домен

Задает домен, используемый при подключении к прокси-серверу, требующему проверку подлинности. При использовании параметра /parameters это значение является элементом <proxydomain> и содержит строку.

/proxypassword:пароль

или

/pp:пароль

Задает пароль, используемый при подключении к прокси-серверу, требующему проверку подлинности. При использовании параметра /parameters это значение является элементом <proxypassword> и содержит строку.

/proxyusername:имя_пользователя

или

/pu:имя_пользователя

Задает имя пользователя, используемое при подключении к прокси-серверу, требующему проверку подлинности. При использовании параметра /parameters это значение является элементом <proxyusername> и содержит строку.

/server

Генерирует абстрактный класс для XML-веб-службы на основе контрактов. По умолчанию создаются клиентские прокси-классы. При использовании параметра /parameters это значение является элементом <style>, содержащим значение server.

/serverInterface

Создает интерфейсы для реализации сервера веб-службы ASP.NET. Для каждой привязки в документе (или документах) WSDL генерируется интерфейс. Документ WSDL сам по себе реализует контракт WSDL (методы классов, реализующих интерфейс, не должны иметь ни атрибутов веб-служб, ни атрибутов сериализации, изменяющих контракт WSDL). Краткая форма: /si. При использовании параметра /parameters это значение является элементом <style>, содержащим значение serverInterface.

/sharetypes

Включает совместное использование типов. Эта функция создает файл кода с одним определением типа для идентичных типов, которое используется разными службами (пространство имен, имя и сетевая подпись должны быть идентичными). Укажите службы с помощью URL-адресов в параметрах командной строки (начинающихся с "http://") или создайте документ DISCOMAP для локальных файлов. При использовании параметра /parameters это значение является элементом <sharetypes> и имеет значение либо true, либо false.

/u[sername]:имя_пользователя

Задает имя пользователя, используемое при подключении к серверу, требующему проверку подлинности. При использовании параметра /parameters это значение является элементом <username> и содержит строку.

/?

Отображает синтаксис команд и параметров инструмента.

Файл WSDL — это документ XML, составленный согласно XML-грамматике, называемой языком описания веб-служб (WSDL). Этот файл определяет поведение XML-веб-службы и указывает клиентам правила взаимодействия с ней.

Документы обнаружения для XML-веб-службы можно получить с помощью программы Инструмент для обнаружения веб-служб (Disco.exe). Файлы DISCOMAP, DISCO, WSDL и XSD, созданные этой программой, можно использовать в качестве входных данных для программы Wsdl.exe.

При создании прокси-класса с помощью программы Wsdl.exe создается один исходный файл на указанном языке программирования. При генерировании исходного кода для прокси-класса программа определяет, какой тип лучше использовать для объектов, указанных в описании службы. В некоторых случаях при приведении объектов к типу используется "принцип наименьшего общего знаменателя". В результате созданный тип в прокси-классе может отличаться от требуемого или ожидаемого разработчиком. Например, когда программа WSDL.exe встречает в описании службы тип ArrayList, в генерируемом прокси-классе создается массив Object Array. Чтобы обеспечить правильное приведение типов объектов, откройте файл, содержащий сгенерированный прокси-класс, и измените все неправильные типы объектов на ожидаемые типы.

Формат файла XML, поддерживаемый параметром /parameters, — это набор элементов, заключенных во внешний элемент <wsdlParameters xmlns="http://microsoft.com/webReference/">. Если указаны значения параметров командной строки и используется файл /parameters, содержащий другие параметры или значения, то используются значения, указанные в командной строке. Элемент <wsdlParameters xmlns="http://microsoft.com/webReference/"> должен содержать следующие элементы: <nologo>, <parsableerrors> и <sharetypes>.

Некоторые параметры передаются в виде дочерних элементов элемента <webReferenceOptions>, который должен содержать элемент <verbose>. Элемент <webReferenceOptions> также имеет следующие дочерние элементы:

Примеры использования параметра /parameters см. в разделе "Примеры".

msdn.microsoft.com

Создание Java классов на основании wsdl описания soap веб-сервиса с помощью wsimport

This XML file does not appear to have any style information associated with it. The document tree is shown below.

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://soap.ws.javastudy.ru/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="HelloSoap" targetNamespace="http://soap.ws.javastudy.ru/">

<wsdl:types>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://soap.ws.javastudy.ru/" elementFormDefault="unqualified" targetNamespace="http://soap.ws.javastudy.ru/" version="1.0">

<xs:element name="getGoods" type="tns:getGoods"/>

<xs:element name="getGoodsResponse" type="tns:getGoodsResponse"/>

<xs:element name="goods" type="tns:goods"/>

<xs:element name="sayHelloTo" type="tns:sayHelloTo"/>

<xs:element name="sayHelloToResponse" type="tns:sayHelloToResponse"/>

<xs:element name="testService" type="tns:testService"/>

<xs:element name="testServiceResponse" type="tns:testServiceResponse"/>

<xs:complexType name="testService">

<xs:sequence/>

</xs:complexType>

<xs:complexType name="testServiceResponse">

<xs:sequence>

<xs:element minOccurs="0" name="return" type="xs:string"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="getGoods">

<xs:sequence/>

</xs:complexType>

<xs:complexType name="getGoodsResponse">

<xs:sequence>

<xs:element minOccurs="0" name="return" type="tns:goods"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="goods">

<xs:sequence>

<xs:element name="id" type="xs:int"/>

<xs:element minOccurs="0" name="name" type="xs:string"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="sayHelloTo">

<xs:sequence>

<xs:element minOccurs="0" name="text" type="xs:string"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="sayHelloToResponse">

<xs:sequence>

<xs:element minOccurs="0" name="return" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:schema>

</wsdl:types>

<wsdl:message name="testService">

<wsdl:part element="tns:testService" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="getGoods">

<wsdl:part element="tns:getGoods" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="testServiceResponse">

<wsdl:part element="tns:testServiceResponse" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="sayHelloTo">

<wsdl:part element="tns:sayHelloTo" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="getGoodsResponse">

<wsdl:part element="tns:getGoodsResponse" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:message name="sayHelloToResponse">

<wsdl:part element="tns:sayHelloToResponse" name="parameters"></wsdl:part>

</wsdl:message>

<wsdl:portType name="WebserviceSEI">

<wsdl:operation name="testService">

<wsdl:input message="tns:testService" name="testService"></wsdl:input>

<wsdl:output message="tns:testServiceResponse" name="testServiceResponse"></wsdl:output>

</wsdl:operation>

<wsdl:operation name="getGoods">

<wsdl:input message="tns:getGoods" name="getGoods"></wsdl:input>

<wsdl:output message="tns:getGoodsResponse" name="getGoodsResponse"></wsdl:output>

</wsdl:operation>

<wsdl:operation name="sayHelloTo">

<wsdl:input message="tns:sayHelloTo" name="sayHelloTo"></wsdl:input>

<wsdl:output message="tns:sayHelloToResponse" name="sayHelloToResponse"></wsdl:output>

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name="HelloSoapSoapBinding" type="tns:WebserviceSEI">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="testService">

<soap:operation soapAction=""/>

<wsdl:input name="testService">

<soap:body use="literal"/>

</wsdl:input>

<wsdl:output name="testServiceResponse">

<soap:body use="literal"/>

</wsdl:output>

</wsdl:operation>

<wsdl:operation name="getGoods">

<soap:operation soapAction=""/>

<wsdl:input name="getGoods">

<soap:body use="literal"/>

</wsdl:input>

<wsdl:output name="getGoodsResponse">

<soap:body use="literal"/>

</wsdl:output>

</wsdl:operation>

<wsdl:operation name="sayHelloTo">

<soap:operation soapAction=""/>

<wsdl:input name="sayHelloTo">

<soap:body use="literal"/>

</wsdl:input>

<wsdl:output name="sayHelloToResponse">

<soap:body use="literal"/>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="HelloSoap">

<wsdl:port binding="tns:HelloSoapSoapBinding" name="HelloSoapPort">

<soap:address location="http://localhost:8080/soap/webserviceSEI"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

javastudy.ru

WSDL файл, что я делаю не так? — Toster.ru

Здравствуйте. Помогите пожалуйста с веб-сервисом Пытаюсь написать собственный веб-сервис. WSDL файл такой <?xml version="1.0" encoding="utf-8"?> <!--Created with Liquid XML Studio Developer Edition 9.0.11.3078 (http://www.liquid-technologies.com)--> <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://example.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" name="opt.inmark" targetNamespace="http://opt.inmark.biz" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <xs:schema xmlns:tns="http://schemas.xmlsoap.org/wsdl/" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://example.com/"> <element name="InputType"> <complexType> <sequence> <element name="input" type="string" /> </sequence> </complexType> </element> <element name="OutputType"> <complexType> <sequence> <element name="output" type="string" /> </sequence> </complexType> </element> </xs:schema> </types> <message name="findingPartNumber"> <part name="InputMessagePart" type="xs:string" /> </message> <message name="resultFindPart"> <part name="OutputMessagePart" type="xs:string" /> </message> <message name="findingPartStep1"> <part name="InputMessagePart" type="xs:string" /> </message> <message name="resultFindPartStep1"> <part name="OutputMessagePart" type="xs:string" /> </message> <message name="findingPartStep2"> <part name="InputMessagePart" type="xs:string" /> </message> <message name="resultFindPartStep2"> <part name="OutputMessagePart" type="xs:string" /> </message> <message name="requestAddBacket"> <part name="InputAddBacket" type="xs:string" /> </message> <message name="responseAddBacket"> <part name="OutputAddBacket" type="xs:string" /> </message> <message name="requestEditBacket"> <part name="InputEditBacket" type="xs:string" /> </message> <message name="responseEditBacket"> <part name="OutputEditBacket" type="xs:string" /> </message> <message name="requestDeleteBacket"> <part name="InputDeleteBacket" type="xs:string" /> </message> <message name="responseDeleteBacket"> <part name="OutputDeleteBacket" type="xs:string" /> </message> <message name="requestMakeOrder"> <part name="InputMakeOrder" type="xs:string" /> </message> <message name="responseMakeOrder"> <part name="OutputMakeOrder" type="xs:string" /> </message> <portType name="partsPort"> <operation name="SearchOffer"> <input xmlns:q1="http://opt.inmark.biz" message="q1:findingPartNumber" /> <output xmlns:q2="http://opt.inmark.biz" message="q2:resultFindPart" /> </operation> <operation name="SearchOfferStep1"> <input message="tns:findingPartStep1" /> <output message="tns:resultFindPartStep1" /> </operation> <operation name="SearchOfferStep2"> <input message="tns:findingPartStep2" /> <output message="tns:resultFindPartStep2" /> </operation> <operation name="AddBacket"> <input message="tns:requestAddBacket" /> <output message="tns:responseAddBacket" /> </operation> <operation name="EditBacket"> <input message="tns:requestEditBacket" /> <output message="tns:responseEditBacket" /> </operation> <operation name="DeleteBacket"> <input message="tns:requestDeleteBacket" /> <output message="tns:responseDeleteBacket" /> </operation> <operation name="MakeOrder"> <output message="tns:responseMakeOrder" /> </operation> </portType> <binding xmlns:q3="http://opt.inmark.biz" name="partsBinding" type="q3:partsPort"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="SearchOffer"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="SearchOfferStep1"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="SearchOfferStep2"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="AddBacket"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="EditBacket"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="DeleteBacket"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="MakeOrder"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <service name="getAllSupliers"> <port xmlns:q4="http://opt.inmark.biz" name="getParts" binding="q4:partsBinding"> <soap:address location="http://opt.inmark.biz/webservice" /> </port> </service> </definitions> PHP SOAP клиент отрабатывает нормально все. А вот при попытке дернуть вебсервис чем нибудь другим, например расширением для Firefox "SOA client" выскакивает ошибка Procedure 'SearchOffer' not present Что у меня не так с WSDL?

toster.ru


Смотрите также