Элемент проекта вида «SoapСервис»

Для создания SOAP-сервиса следует добавить в проект элемент Soap Сервис.

В описании элемента проекта указываются настройки создаваемого сервиса, свойства, а также методы из модуля, которые реализуют операции SOAP-сервиса. Модуль SOAP-сервиса содержит описание передаваемых данных (структур встроенного языка), пользовательских исключений, а также реализацию операций сервиса.

Описание элемента проекта «SoapСервис»

При создании описания SOAP-сервиса вам необходимо определить следующие свойства:

  1. ПространствоИменСервиса — пространство имен, в котором описан сервис. Атрибут targetNamespace WSDL-описания сервиса (definitions.targetNamespace).
  2. ИмяСервиса — имя сервиса. Атрибут name WSDL-описания сервиса (definitions.name). Если не указан, то используется имя элемента проекта.
  3. КорневойUrl — базовая часть URL, по которой будет выполняться обращение к сервису.
  4. Обработчики — описание операций, которые выполняют обработку данных из входящего SOAP-сообщения от клиента сервиса и формируют результат для исходящего SOAP-сообщения. Для каждой операции вы пишете на встроенном языке метод, который реализует необходимую функциональность. Методы находятся в модуле SOAP-сервиса. Например, SOAP-сервис может выглядеть следующим образом:
ВидЭлемента: SoapСервис
Ид: 20658364-7777-4b14-9423-ec212de5be72
Имя: СервисМагазина
ОбластьВидимости: ВПодсистеме
КонтрольДоступа:
    Разрешения:
        Вызов: РазрешеноВсем
        ПоУмолчанию: РазрешеноВсем
ПространствоИменСервиса: https://mycustomshop.ru
ИмяСервиса: ShopService
КорневойUrl: shopservice
Обработчики:
    -
        Имя: AddToCart
        Метод: ДобавитьВКорзину
        Ошибки:
            - СервисМагазина.MyCustomException

Модуль SOAP сервиса

В модуле SOAP сервиса следует добавить:
  1. Структуры, для описания:
    • передаваемых в сервис параметров и результата запроса. Однако это не обязательно, можно также использовать встроенные типы — Число, Строка и т. д. Данные типы будут автоматически сопоставлены с соответствующими XML-типами.
    • используемых в сервисе исключений. Данные типы будут сопоставлены с SOAP-ошибками.
  2. Методы для описания операций, выполняемых в результате вызова обработчиков.
Пример модуля SOAP-сервиса:
// Описание пользовательской ошибки
@ВПроекте
исключение MyCustomException
  обз пер ReasonDescription: Строка
  обз пер AppErrorCode: Число
;

// Структура, описывающая параметры метода обработчика
структура Item
    обз пер Sku: Число
    обз пер Name: Строка
    обз пер Price: Число
;

//Обработчик операции сервиса
метод ДобавитьВКорзину(Item: Item, Count: Число)
    // Метод, написанный разработчиком
;
Важно: Ограничения на код модуля
  1. Запрещено использовать кириллицу в именах обработчиков.
  2. В структурах встроенного языка, используемых в сообщениях (параметрах и возвращаемых значениях обработчиков на встроенном языке SOAP-сервиса), в заголовках, а также в исключениях встроенного языка, используемых как SOAP ошибки:
    • Не должно быть циклических ссылок.
    • Допустим только составной тип, состоящий из одного из поддерживаемых типов + Неопределено. В этом случае в XML-элементе будет использовано ограничение minOccurs=0. Другие составные типы не разрешены.
    • Допустимы только следующие типы данных:
      Тип встроенного языка XML тип Примечание
      Строка string
      Число decimal
      Булево boolean
      ДатаВремя dateTime
      Дата date
      Время time
      Месяц gMonth
      Длительность duration
      Байты base64Binary
      Структура complexType
      Неопределено minOccurs=0

      ЧитаемаяКоллекция<Тип>, где Тип — значения поддерживаемого типа

      minOccurs=unbounded

      Не поддерживается коллекция коллекций

Также в модуле SOAP-сервиса можно обработать событие ВычислитьРазрешенияДоступа (подробнее).

WSDL описание SOAP-сервиса

из элемента проекта формирует WSDL описание SOAP-сервиса. Чтобы получить описание, следует выполнить GET-запрос к сервису с параметром ?wsdl. Пример:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="https://mycustomshop.ru" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="https://mycustomshop.ru">
    <types>
        <xsd:schema>
            <xsd:import namespace="https://mycustomshop.ru" schemaLocation="http://127.0.0.1:9090/applications/SOAPServis/api/shopservice?xsd=1"/>
        </xsd:schema>
    </types>
    <message name="AddToCart">
        <part name="parameters" element="tns:AddToCart"/>
    </message>
    <message name="AddToCartResponse">
        <part name="parameters" element="tns:AddToCartResponse"/>
    </message>
    <message name="MyCustomException">
        <part name="fault" element="tns:MyCustomException"/>
    </message>
    <portType name="ShopService">
        <operation name="AddToCart">
            <input message="tns:AddToCart"/>
            <output message="tns:AddToCartResponse"/>
            <fault message="tns:MyCustomException" name="MyCustomException"/>
        </operation>
    </portType>
    <binding name="ShopServicePortBinding" type="tns:ShopService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <operation name="AddToCart">
            <soap:operation soapAction="AddToCart"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
            <fault name="MyCustomException">
                <soap:fault name="MyCustomException" use="literal"/>
            </fault>
        </operation>
    </binding>
    <service name="ShopService">
        <port name="ShopServicePort" binding="tns:ShopServicePortBinding">
            <soap:address location="http://127.0.0.1:9090/applications/SOAPServis/api/shopservice"/>
        </port>
    </service>
</definitions>

URL для запроса к SOAP-сервису

Сервис обрабатывает POST-запросы. Корректный URL запроса к SOAP-сервису должен иметь следующую структуру:

{АдресПубликацииПриложения}/api/{КорневойURL}
Для данного элемента проекта приложение будет обрабатывать SOAP-запросы к сервису по пути:
http://[адрес сервера]/applications/[имя приложения]/api/shopservice

Чтобы получить WSDL описание сервиса, следует отправить GET-запрос с параметром ?wsdl. Например:

http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl

Рассмотрите части запроса по порядку:

http или https
Используемый протокол
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
АдресПубликацииПриложения
Адрес и путь публикации приложения на сервере
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
api
Признак того, что данный URL представляет запрос к публичному API приложения
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
КорневойURL
Относительный URL сервиса. Должен быть уникальным среди всех сервисов в проекте. Определяет конкретный сервис, который должен обработать запрос
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
ПараметрыЗапроса
Стандартный способ передачи параметров запроса через URL.
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl

Элемент проекта SoapСервис предоставляет следующую функциональность и логику работы:

Порождаемые типы встроенного языка
SOAP-сервис, добавленный в проект, порождает во встроенном языке один тип, в модуле которого вы можете разместить все обработчики операций SOAP-сервиса
Обработка запросов
Для обработки запросов необходимо для каждой операции, описанной в SOAP-сервисе, создать в модуле SOAP-сервиса метод-обработчик
Обработка ошибок

Во время исполнения обработчика на встроенном языке при возникновении ошибки выбрасывается исключение. создает из выброшенного обработчиком запроса исключения SOAP ошибку и формирует HTTP-код ответа 500 (Internal server error). Вы также можете создать пользовательское исключение в модуле SOAP-сервиса. Когда во время исполнения обработчика операции данное исключение будет выброшено, сериализует объект-исключение в SOAP Fault сообщение.

Аутентификация внешних программ

Если настроен контроль доступа, отличный от РазрешеноВсем, то для аутентификации внешних информационных систем используются токены доступа

Права
Элемент проекта вида SoapСервис обладает правом Вызов (подробнее)
Событие ВычислитьРазрешенияДоступа следует обрабатывать в модуле SOAP-сервиса.
Все свойства SOAP-сервиса
Здесь описано назначение всех свойств SOAP-сервиса, которые вы можете изменять в проекте