При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

Мы описывали как настраивать веб-публикацию на IIS в инструкции.

Есть следующие возможные решения:

  1. Убедитесь, что разрешения NTFS для файла web.config верны и обеспечивают доступ к учетной записи компьютера веб-сервера.
  2. Проверьте журналы событий, чтобы посмотреть, была ли зафиксирована какая-либо дополнительная информация.
  3. Проверьте разрешения на использование библиотеки DLL.
  4. Установите компонент расширения .NET, если запрос сопоставлен управляемому обработчику.
  5. Создайте правило трассировки, чтобы отслеживать невыполненные запросы для этого кода состояния HTTP.

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

Если модуль был установлен с 32-битного клиента, то требуется это указать в пуле приложений. Для этого мы делаем следующую настройку:

  • Выбираем “Пулы приложения” которые задействованы в веб публикации, в нашем случае DafaultAppPool.
  • Нажимаем ПКМ “Дополнительные параметры”.
  • В строке “Разрешены 32-разрядные приложения мы указываем “True” как на рисунке 1.
  • Нажимаем ОК.
  •  Дополнительные параметры пула приложений

    Рисунок 1 – Дополнительные параметры пула приложений

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

    Нужна готовая настройка веб-доступа к 1С? Попробуйте наш сервер 1С в аренду, в услугу включены все настройки и обслуживание.

Не нашли ответа на свой вопрос?

Здравствуйте. В курсе вы неоднократно говорили, что при реализации http-сервисов в 1С (платформа 8.3.5) – рекомендуется перейти на них. А в чем будет их преимущество? В скорости авторизации? В скорости передачи данных? В надежности? В меньшем количестве кода (как мне показалось)?

И второй вопрос. Попробовав осилить http-сервис собственными силами, попробовал реализовать две процедуры:

// на мобильном устройстве
&НаСервере
Функция ВыполнитьСоединениеПоХТТП()

// подготовка файла для передачи
СтруктураДляПередачи = Новый Структура;
СтруктураДляПередачи.Вставить(“Пользователь”, ПараметрыСеанса.ТекущийПользователь);
СтруктураДляПередачи.Вставить(“ДанныеСтрокой”, “Строковые данные”);
ХранилищеДляПередачи = Новый ХранилищеЗначения(СтруктураДляПередачи, Новый СжатиеДанных(9));
ТекстФайла = Сериализовать(ХранилищеДляПередачи);

// передача файла
Соединение = новый HTTPСоединение(“base.ildarcheg.ru/”, , “-“, “-“);
Запрос = Новый HTTPЗапрос(“BillyTest/hs/auth/file/”);
Запрос.УстановитьТелоИзСтроки(ТекстФайла);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

// преобразование полученного сериализованного хранилища
ПолученнаяСтруктура = Десериализовать(Ответ.ПолучитьТелоКакСтроку()).Получить();

Возврат ПолученнаяСтруктура;

КонецФункции

// в модуле http-сервиса центральной базы
Функция userpost(Запрос)

// получение структуры из входящих данных
Данные = Запрос.ПолучитьТелоКакСтроку();
Хранилище = Десериализовать(Данные);
Структура = Хранилище.Получить();

// подготовка ответа
Структура.Вставить(“ДанныеОбработаны”, Истина);
ХранилищеДляПередачи = Новый ХранилищеЗначения(Структура, Новый СжатиеДанных(9));
ТекстФайла = Сериализовать(ХранилищеДляПередачи);

// передача ответа
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ТекстФайла);

Возврат Ответ;

КонецФункции

В правильном направлении я иду?

P.S. на глаз скорость обмена быстрее, чем у веб-сервиса

Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Возвращаем массив

Хочу рассказать об ошибках, с которыми столкнулся при разработке веб-сервисов на 1С. Статью буду дополнять по мере получения опыта.

1
Это сообщение об ошибке при подключении к веб сервису из PHP.
[31-Mar-2013 05:32:02 UTC] PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://test.ru/test/ws/WebServices?wsdl’ : failed to load external entity

Данное сообщение говорит лишь о недоступности веб-сервера, на котором опубликована база. В этом случае попробуйте вручную вызвать http://test.ru/test/ws/WebServices?wsdl и убедиться, что WSDL формируется. Если не формируется, значит либо веб-сервер выключен, либо база опубликована по другому адресу или порту, либо блокирует фаервол. Могут быть и другие причины.




2
02-Apr-2013 13:46:10 UTC] PHP Fatal error:  Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/users/b/test/domains/test.ru/testDIR/test.php:169


Эта ошибка возникает если WSDL возвращается с ошибкой. Есть несколько причин для этой ошибки:

  1. Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.

3

Ошибка SOAP сервера: Неизвестная ошибка. bad allocation.

Скорее всего недостаток оперативной памяти – проверьте запрос и результат вывода веб сервиса. Запрос может быть сложным, потому может быстро исчерпать оперативную память.

Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Введение

Для создания самого простого веб-сервиса необходимо:

  1. создать в дереве метаданных объект Web-Сервис;

  2. указать его URI пространства имен;
  3. создать необходимую операцию, если нужно указать ее параметры и тип возвращаемого значения;
  4. написать обработчик вызываемой операции;
  5. опубликовать веб-сервис.

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

Итак начнем.

Откройте конфигурацию и в дереве метаданных найдите ветку “Общие – Web-сервисы”. Нажмите правой кнопкой и добавьте новый элемент.

Реализация веб-сервиса в 1с

Введите имя создаваемого веб-сервиса.

Имя веб-сервиса можно задать русское. И платформа его сохранит и опубликует, но рекомендую использовать латиницу в названиях веб-сервисов,  ws-операций, параметров ws-операций. Например, chrome не смог отобразить wsdl файл веб-сервиса с русским именем.
Перейдите на вкладку  “Прочее” и укажите параметр “URI пространство имен”.

Реализация веб-сервиса в 1с

В документации об этом параметре написано чуть больше чем ничего, примерно то, что это поле служит для идентификации вашего веб-сервиса. Когда я делал свой первый веб-сервис, мне казалось что это ссылка на сайт, на котором я публикую свой веб-сервис и все наименования буду получаться через запрос к этому сайту. На самом деле “URI пространство имен” не что иное как строка определяющая название набора ваших имен (названий веб-сервиса, операций, параметров, типов данных и т.д.). То есть если вы объявите свой тип “integer” то xml-парсер не будет ругаться, так как этот тип принадлежит вашему пространству имен. Мало того если “URI пространство имен” будет содержать русские символы и не будет соответствовать стандарту как формат URI, платформа все равно опубликует такой веб-сервис, и он будет работать. Но по стандартам рекомендуется использовать URI ссылку. Я советую того же самого.
Простое и понятное объяснение пространства имен можно прочитать тут.

Поле “Пакеты XDTO” не обязательное. Оно определяет набор пакетов XDTO в которых вы можете оказать свои типы значений. Это не обязательное поле, по умолчанию вам всегда доступны типы пространства имен “http://www.w3.org/2001/XMLSchema”. О пакетах XDTO я расскажу чуть позже.

“Имя файла публикации”, это имя файла, в котором хранятся настройки веб-сервиса для Apache(путь к базе и другие) после публикации. Папка, в которой находится этот файл, определяется при публикации. О публикации на веб-сервере будет рассказано позже.

Веб-сервис создан, но еще нет ни одной функции которую он мог бы исполнить. Надо добавить операцию. Для этого добавьте в созданный веб-сервис операцию. Нажмите не веб-веб-сервис правой кнопкой и выберите “Добавить-Операция”. Она будет к вашему операнду прибавлять 2 и возвращать значение. Давайте назовем ее “Plus2”. Можно указать и русское название, многие клиенты его обработают, но все же могут возникнуть проблемы.

Реализация веб-сервиса в 1с

“Тип возвращаемого значения” это тип описанный в указанном вами пакете XDTO или же тип из пространства имен “http://www.w3.org/2001/XMLSchema”. Именно в этом типе веб сервис будет возвращать значение.
“Возможно пустое значение” признак что ws-операция может не вернуть значение(nillable=”true).
“В транзакции” указывает что код веб-сервиса будет выполняться в транзакции. А “Режим управления блокировкой данных” определяет тип блокировки данных при транзакции по умолчанию.

Установим тип возвращаемого значения в int. В поле “Имя метода” укажем имя “Plus2” для нового метода, который будет выполнять обработку. При нажатии на лупу метод будет автоматом создан в модуле веб-сервиса.
Напишем простой код.

Функция Plus2(Параметр)
Возврат Параметр+2;
КонецФункции

Вы заметили что на входе функции у нас есть параметр “Параметр”. Для того что бы в метод этот параметр был передан надо добавить его в дереве метаданных. Для этого щелкните правой кнопкой по веб-операции Plus2 и выберите “Добавить-Параметр”.

Реализация веб-сервиса в 1с

Давайте назовем его “Param”. Названия параметров тоже можно указывать русскими, мало того  класс SoapClient языка PHP работает с ними корректно, ведь параметры передаются через массив. Желательно использовать кодировку UTF-8.

Укажем “Тип значения” int из пространства имен “http://www.w3.org/2001/XMLSchema”.

Свойство “Возможно пустое” указывает что можно передать значение null в веб-операцию.

“Направление передачи” указывает по значению или по “ссылке” передается операнд в ws-операцию. Возможные значение “Входной”, “Выходной”, “Входной-Выходной”. Таким образом если вы для параметра укажете “Выходной” или “Входной-Выходной” то сможете менять значения операнда. В результате xml сообщение-ответ дополнится строкой с новым значением операнда. Я пока не сталкивался с задачами которые можно решить только используя Выходное направление операнда, потому не могу дать какие то комментарии по этому свойству.


Вот в принципе и всё! Веб сервис создан, но существует он пока что только как описание в вашей конфигурации. Для того что бы им воспользоваться надо его опубликовать на вашем веб-сервере. Как опубликовать вы можете прочитать в статье 1С:Предприятие 8. Веб-сервисы. Публикация и тестирование.

Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Написание кода веб-сервиса

Публикация веб-сервиса – это процесс настройки веб-сервера (Apache или IIS) на работу совместно с Платформой 1С. То есть, после публикации, ваш веб-сервер станет посредником между клиентом веб-сервисов и базой 1С. При этом веб-сервер, а точнее менеджер сервисов 1с, запущенный в процессе веб-сервера, будет заниматься слежением за соединениями с информационной базой, приемом запросов от клиентов, поддержкой WSDL описания, сериализацией сообщений, реализацией протоколов SOAP.

Обязательным условием для   публикации является наличие установленного веб-сервера и установленные модули расширения веб-сервера. Модули расширения веб-сервера устанавливаются из инсталлятора платформы 1С. Веб-сервер Apache можно скачать по ссылке:  httpd-2.2.25-win32-x86-openssl-0.9.8y.msi или найти другую версию на странице загрузки. Про установку Apache довольно много статей, думаю установить ее не составит проблем.

Читайте также:  КОД ОШИБКИ 0 XC 0000022 КАК ИСПРАВИТЬ

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

Публикацию веб-сервисов можно выполнять и на ОС Linux и на ОС Windows. Я работал пока что только с Windows, потому расскажу про нее.

Публикация на ОС Windows

Если для публикации веб-сервиса на Linux не обойтись без командной строки(8.3 пока еще бета), то для публикации на Windows достаточно конфигуратора 1С.
Откройте конфигуратор и зайдите в меню “Администрирование – Публикация на веб-сервере…”.

Публикация и тестирование веб-сервисов 1с на Apache

Появится окно “Публикация на веб-сервере”.

Публикация и тестирование веб-сервисов 1с на Apache

“Имя” – это имя публикации. Если бы можно было представить “сайт” 1С как папку на вашем веб сервере, то путь к этой папке в браузере как раз бы определялся как имя сервера / имя публикации. То есть ссылка на веб-клиент выглядит так:

http://имя сервера/имя публикации

Примечание: при использовании в качестве веб-сервера Apache все ссылки веб-клиента будут регистрозависимыми. То есть в данном случае при переходе по ссылке

http://имя сервера/forCodeNotesBlog

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

“Веб-сервер” – это список выбора веб-сервера из установленных на данный момент веб-серверов на текущей машине. Если вы установите веб-сервер Apache то он появится в этом поле автоматически.

“Каталог” – это путь к каталогу в котором хранится файл настройки подключения веб-сервера к информационной базе 1С. Путь должен содержать только латинские символы.

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

“Публиковать Web-сервисы” – указывает, будут ли опубликованы ваши веб-сервисы.

После заполнения всех полей нажмите кнопку “Опубликовать” и веб-сервис будет опубликован.

Теперь можно воспользоваться свои веб-сервисом. После публикации я для начала смотрю формируется ли описание WSDL. Чтобы его получить достаточно браузера. Ссылка на описание WSDL формируется по следующему принципу:

http://имя сервера/имя публикации/ws/имя веб-сервиса?wsdl

То есть в нашем случае ссылка будет выглядеть так:

http://192.168.1.100/ForCodeNotesBlog/ws/WebService?wsdl

Если WSDL сформировался, то это хороший знак).

Но сейчас мы рассмотрим более качественный продукт, чем самописная обработка – это кросстлатформенная система для работы с веб-сервисами soapUI(http://www.soapui.org).

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

Ну что же. Давайте вызовем нашу веб-операцию. Для этого программе надо указать описание нашего веб-сервиса. В левой части программы есть дерево проектов. Нажмем по корню дерева правой кнопку и вызовем команду “New soapUI project”.

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

Появится окно ввода ссылки или файла с описанием веб-сервиса.

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

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

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

Нажмите ОК и в дереве проектов вы увидите свой веб-сервис.

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

Почему это дерево называется деревом проектов а не деревом веб-сервисов? Потому что помимо структуры вашего веб-сервиса он содержит ветки настроек, тестов, запросов и прочего. Например если вы развернете дерево и найдете свою операцию, то заметите что у нее уже создан один запрос (Request1). Этот запрос содержит SOAP сообщение. Если по нему щелнкуть мышкой два раза то вы увидите новое окно, изображенное на рисунке выше.
Левая часть окна содержит SOAP сообщение запрос, правая будет содержать в себе результат веб-операции. Вместо вопросительных знаков укажите свои значение параметров и нажмите кнопку “Submit request to specified endpoint URl”, изображенное в виде зеленой стрелочки.
После нажатия на эту кнопку в правом окне будет возвращен результат веб-операции.

Примечание: в платной версии soapUI имеется возможность редактирования SOAP сообшения привычными способами – ввоз данных в поля, вместо редактирования XML.

Если в вашей базе есть хотя бы один пользователь, то перед выполнением веб-операции вам нужно ввести его учетные данные. Для ввода учетных данных необходимо нажать кнопку “Aut” под левым окном.

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

В поле “Authorisation Type” необходимо указать “Preemptive”.

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

И ввести логин пароль пользователя базы данных, который имеет право на исполнение этой веб-операции.

Публикация и тестирование веб-сервисов 1с на Apache - soapUI

После ввода учетных данных можно выполнить операцию получить результат в правом окне. К сожалению для каждого запроса (Request) необходимо заново вводить учетные данные.

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

На приведенных выше изображениях, вы видите результат исполнения, описанной в других статьях, операции Plus2. Мы видим, что на выполнение операции ушло 1243 миллисекунд, что довольно много на операцию сложения. Объем переданных данных – 316 байт.

Примечание: для тестирования веб-сервисов у разработчиков soapUI есть еще одно бесплатное приложение – loadUI.

Допустим у вас есть веб-операция, имеющая операнд тип datetime. При выполнении обязательно указание даты и вы не можете указать пустое значение. Дата указывается в определенном формате:

ГГГГ-ММ-ДДTЧЧ:мм:СС.ссс+/-ЧЧ:мм

либо

ГГГГ-ММ-ДДTЧЧ:мм:СС.ссс

либо

ГГГГ-ММ-ДДTЧЧ:мм:СС

Пример:

2012-09-14T00:00:00.000+02:00

Возможно есть еще форматы записи для поля типа datetime. Причем формат ГГГГ-ММ-ДДTЧЧ:мм:СС.ссс+/-ЧЧ:мм содержит в себе данные о часовом поясе отправителя запроса. Если веб-операция на 1С получает такое значение, то она считает это время местным временем отправителя и преобразует в свое местное время. Данный пример, а так же как указать значение null более подробно описаны в статье 1С:Предприятие 8. Веб-сервисы. Написание кода веб-сервиса.
Тип число тоже требует обязательного указания значения – хотя бы нуля.

В этой статье рассмотрим, как можно реализовать веб-сервис в расширении платформы 1С.

В качестве примера возьмем веб-сервис, позволяющий передавать информацию о клиентах из внешней CRM-системы во внутреннюю систему управленческого учета на «1С:Управление нашей фирмой».

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

О чем эта статья

Материал статьи раскроет ответы на следующие вопросы:

  • Как работать с XDTO-пакетами?
  • Как создать веб-сервис и настроить его свойства?
  • Как опубликовать веб-сервис на сервере?

Постановка задачи

Компания ведет учет в типовом решении фирмы «1С:Управление нашей фирмой» (УНФ). Для управления взаимоотношениями с клиентами используется облачная CRM-система. В CRM-систему вводят информацию о новых клиентах. Необходимо реализовать перенос сведений о новых клиентах в УНФ сразу же при регистрации данных в CRM-системе.

Схема работы

Рисунок 1. Схема работы

Данные должны передаваться одним параметром (структурой). Спецификация данных, передаваемые из CRM в УНФ приведены в таблице 1.

Таблица 1. Требования к данным для обмена

Данные Имя cвойства Тип Ограничения
Полное наименование FullName Строка Обязательно для заполнения
ИНН INN Строка(12) Для ЮрЛица – длина 10
Для ИП – длина 12
Для ФизЛица – не заполняется
Допускаются только цифры
КПП KPP Строка(9) Для ЮрЛица – длина 9
Для ФизЛица – не заполняется
Допускаются только цифры
Телефон Phone Строка(12) Обязателен для заполнения
формат +7 (NNN) NNN-NN-NN

После создания контрагента в CRM-систему должен быть передан уникальный идентификатор. Идентификатор будет использоваться в дальнейшем для сопоставлении клиента в CRM и УНФ при обмене заказами. Необходимо реализовать описанный функционал без снятия УНФ с поддержки.

Обоснование выбора варианта решения

  1. Проанализируем требования. Добавлять клиентов надо «на лету», сразу же при вводе в CRM. Значит периодические обмены по расписанию нам не подходят.
  2. Выбранная CRM расположена в облаке, поэтому использовать COM-соединение не получится.
  3. В требованиях к передаваемым данным есть ограничения — на длину строк и на виды контрагентов. Выбирая между технологией обмена через http-сервисы и веб-сервисы, остановимся на веб-сервисах, так как типизация данных и настройка ограничений в них есть «из коробки». Дополнительным плюсом будет то, что веб-сервисы умеют «самодокументироваться», а значит мы экономим время на описании API для разработчиков CRM.
  4. Последнее требование — не снимать конфигурацию с поддержки.

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

Добавляем расширение

Начнем реализацию поставленной задачи и создадим новое расширение. Для этого откроем меню Конфигурация -> Расширения конфигурации.

Добавляем расширение

Рисунок 2. Добавляем расширение

В открывшемся окне жмем кнопку Добавить, а затем заполняем окно создания расширения.

Свойства нового расширения

Рисунок 3. Заполняем свойства нового расширения

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

Импортируем объекты метаданных

Теперь импортируем в расширение объекты для дальнейшей работы. Нам нужны:

  • Справочник Контрагенты
  • Справочник Виды контактной информации
  • Перечисление Типы контактной информации

Начнем со справочника Контрагенты. Выделим его в основной конфигурации и вызовем контекстное меню Добавить в расширение.

Читайте также:  Код ошибки р0087 форд

Импортируем справочник

Рисунок 4. Импортируем справочник

Затем добавим в расширение реквизиты справочника Контрагенты и табличную часть КонтактнаяИнформация.

В результате ветка Контрагенты в расширении должна выглядеть так:

Справочник «Контрагенты» в расширении

Рисунок 5. Справочник «Контрагенты» в расширении

После чего добавим в расширение перечисления ВидыКонтрагентов и ТипыКонтактнойИнформации.

Идем дальше. Из справочника ВидыКонтактнойИнформации нам нужно предопределенное значение ТелефонКонтрагента. Выдяем в дереве метаданных справочник ВидыКонтактнойИнформации и переходим по гиперссылке Предопределенные:

Предопределенные элементы справочника

Рисунок 6. Предопределенные элементы справочника

В ветке Контрагенты находим предопределенный элемент ТелефонКонтрагента.

Выбираем предопределенный элемент ТелефонКонтрагента

Рисунок 7. Выбираем предопределенный элемент ТелефонКонтрагента

Выполняем команду контекстного меню Добавить в расширение. В расширение добавляется справочник ВидыКонтактнойИнформации и его предопределенный элемент ТелефонКонтрагента.

Справочник «Виды контактной информации»

Элементы справочника «Виды контактной информации»

Рисунок 8. Справочник «Виды контактной информации» в расширении

С импортом объектов в расширение мы закончили. Теперь переходим к разработке веб-сервиса.

Как работают веб-сервисы

Веб-сервисы в 1C представляют собой реализацию протокола SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам). Архитектуру приложения на основе протокола SOAP можно представить в виде следующей схемы:

Архитектура приложений на основе протокола SOAP

Рисунок 9. Архитектура приложений на основе протокола SOAP

Общий принцип работы веб-сервиса можно описать так: мы создаем некий функционал, чтобы предоставить его сторонним разработчикам. Для того, чтобы этот функционал был им доступен, мы размещаем его на веб-сервере (публикуем). При публикации веб-сервиса происходит размещение его описания в формате WSDL (WSDL – Web Service Definition Language). Это описание стандартизовано и содержит описание методов веб-сервиса и типов данных, которые могут передаваться между сервисом и его клиентом. Клиент сервиса получает описание сервиса в виде WSDL-файла и может начать обмениваться данными в соответствии с этим описанием. Обмен происходит по протоколу HTTP, а сообщения передаются в теле HTTP пакетов в формате XML.

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

Создаем XDTO-пакет

XDTO-пакеты описывают типы данных, которые будут использоваться при обмене. Потребителями веб-сервисов могут быть программы, написанные на разных языках, поэтому веб-сервис должен представить свои данные в виде примитивных типов (их описание во всех языках равнозначно). XDTO-пакеты позволяют привести типы 1С к типам, которые описаны в общемировом стандарте W3C. Кроме того, мы можем описать набор ограничений, применяемых к данным.

Приступаем к созданию XDTO-пакета для нашего веб-сервиса. В дереве метаданных расширения в ветке Общие -> XDTO-пакеты добавим XDTO-пакет ak_Customers. В URI пространства имен указываем http://kursy-po-1c.ru/ws/wsextension.

Это не ссылка на реальный адрес в интернете, а просто строка-идентификатор пространства имен, который помогает однозначно идентифицировать типы данных с одинаковыми именами. Например, программист Иванов определил тип данных Customer c двумя свойствами Name и FullName, а программист Петров определил свой тип Customer со свойствами Name, INN, KPP.

Чтобы не возникало путаницы и проблем с одинаковыми названиями типов, применяются пространства имен. Пространство имен и имя типа должны однозначно идентифицировать тип данных. При описании типов данных для веб-сервисов принято в качестве пространства имен использовать URI, содержащие доменное имя разработчика. Это позволяет сделать пространство имен уникальным.

Свойства XDTO-пакета

Рисунок 10. Свойства XDTO-пакета

Теперь жмем ссылку Открыть пакет и начинаем описывать типы данных.

Сначала опишем простые типы данных по которым нам нужно наложить ограничения. Это ИНН, КПП, Телефон.

ИНН по условиям задачи различается для ИП и для ЮрЛица.

Определим 2 простых типа: INN_IP и INN_UL. Для этого в форме редактирования пакета открываем меню Добавить -> ТипЗначения.

Добавляем тип значения в XDTO-пакет

Рисунок 11. Добавляем тип значения в XDTO-пакет

Заполняем свойства как на рисунке ниже:

Свойства типа значения INN_IP

Рисунок 12. Свойства типа значения INN_IP

Здесь мы указали имя типа INN_IP (ИНН для ИП) и определили для него ограничение — это должна быть строка длиной 12 знаков.

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

Теперь нам нужно задать ограничение: 12 знаков должны быть цифрами. Выделяем свойство INN_IP и вызываем меню Добавить->Образец:

Добавляем шаблона заполнения INN_IP

Рисунок 13. Добавляем шаблона заполнения INN_IP

Заполняем свойство образца шаблоном в виде регулярного выражения [0-9]{12}. То есть мы допускаем в значении 12 цифр от 0 до 9.

Шаблон заполнения INN_IP

Рисунок 14. Шаблон заполнения INN_IP

Подобные действия нужно произвести с INN_UL (ИНН юрлица) и KPP (КПП):

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

Рисунок 15. Добавляем типы значений и устанавливаем шаблоны

И для телефона (шаблон [+][7][ ][(][0-9]{3}[)][ ][0-9]{3}[-][0-9]{2}[-][0-9]{2}):

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

Рисунок 16. Типа значения Phone и шаблон его заполнения

Теперь перейдем к определению типов для данных о клиентах.

У нас есть три типа клиентов: Юрлицо, ФизЛицо и ИП.  Для всех типов клиентов правила заполнения ИНН и КПП отличаются. Можно сделать только один класс Customer и контроль заполнения ИНН и КПП производить программно, но удобнее это делать декларативно — чтобы уменьшить возможность ошибок. Мы создадим три комплексных типа: CustomerIP, CustomerUL и CustomerFL. Значения ИНН и КПП будем выбирать из ранее созданных типов значений.

Для создания клиента ФизЛицо выделим корень пакета и вызовем меню Добавить -> ТипОбъекта. В свойствах укажем следующие значения:

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

Рисунок 17. Свойства типа объекта CustomerFL

  • CustomerFL — это имя типа. Должно быть на английском.
  • ComplexType — базовый тип, аналогичный структуре.

Выделим тип объекта CustomerFL и вызовем меню Добавить->Свойство. Заполним в редакторе свойств значения:

При создании описания услуги произошла ошибка 1cws wdsdl server response code 500

Рисунок 18. Добавляем свойство FullName в тип объекта CustomerFL

  • FullName — имя свойства. Должно быть на английском.
  • Тип string — строковый тип.
  • Поле FullName должно быть обязательно заполнено указываем Возможно пустое — Ложь.

Таким же образом добавим свойства Phone и GUID.

Свойства типа объекта CustomerFL

Рисунок 19. Добавляем свойство Phone в тип объекта CustomerFL

Добавляем свойство GUID в тип объекта CustomerFL

Рисунок 20 Добавляем свойство GUID в тип объекта CustomerFL

Затем добавим тип объекта CustomerIP с такими же свойствами, как у CustomerFL, добавив новое свойство INN.

Добавляем свойство INN в тип объекта CustomerIP

Рисунок 21. Добавляем свойство INN в тип объекта CustomerIP

Дальше создадим тип объекта CustomerUL с такими же свойствами, как у CustomerIP. Добавим новое свойство KPP.

Добавляем свойство KPP в тип объекта CustomerUL

Рисунок 22. Добавляем свойство KPP в тип объекта CustomerUL

У свойства INN нужно изменить тип на INN_UL (http://kursy-po-1c.ru/ws/wsextension).

Добавляем свойство INN в тип объекта CustomerUL

Рисунок 23. Добавляем свойство INN в тип объекта CustomerUL

Мы завершили создание XDTO-пакета.

Новый XDTO-пакет

Рисунок 24. Новый XDTO-пакет

Переходим к разработке веб-сервиса.

Создаем веб-сервис

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

Заполняем свойства веб-сервиса

Рисунок 25. Заполняем свойства веб-сервиса

  • Имя — ak_Customers
  • ПакетыXDTO — http://kursy-po-1c.ru/ws/wsextension. Теперь сможем использовать типы данных, которые определены этом пакете.
  • URI пространства — http://kursy-po-1c.ru/ws/wsextension. Пространство имен будет использоваться клиентами веб-сервиса.
  • Имя файла публикации — Customers.1cws. Имя будет использоваться в URL для получения WSDL.

Теперь добавим метод веб-сервиса, который будет записывать в УНФ нового контрагента-физлицо. Вызываем меню Добавить->Операция и заполняем свойства:

Свойства метода AddCustomerFL

Рисунок 26. Свойства метода AddCustomerFL

  • Имя — имя метода веб-сервиса. Будет использоваться при обращении к сервису извне.
  • Тип возвращаемого значения — тип данных, который возвращает сервис. В нашем случае это строка-уникальный идентификатор, который в будет возвращен в CRM.
  • Имя процедуры — имя процедуры в модуле сервиса, которая будет выполняться при обращении к этому методу.

Далее мы добавим параметры, которые будут передаваться в веб-сервис.

В нашем случае это один параметр — Customer. Для добавления параметра выделяем операцию веб-сервиса и вызываем контекстное меню Добавить->Параметр. В свойствах этого параметра заполняем свойства:

Свойства параметра Customer

Рисунок 27. Свойства параметра Customer

  • Имя — имя параметра метода сервиса. Будет виден на клиенте веб-сервиса.
  • Тип значения — тип значения, определенный в нашем пакете.

Добавим еще две операции:

  • AddCustomerIP
  • AddCustomerUL.

Можно сделать это копированием. Затем нужно поменять имена операций, имена процедур-обработчиков (AddCustomerIP и AddCustomerUL) и типы параметров. Для AddCustomerIP тип параметра установим CustomerIP, а для AddCustomerUL — CustomerUP.

Теперь нужно создать процедуры-обработчики методов сервиса.

  
   AddCustomerFLCustomer
   ДобавитьКлиентаCustomer ПеречисленияВидыКонтрагентовФизическоеЛицо
  
  
   AddCustomerULCustomer
   ДобавитьКлиентаCustomer ПеречисленияВидыКонтрагентовЮридическоеЛицо
  
  
   AddCustomerIPCustomer
       ДобавитьКлиентаCustomer ПеречисленияВидыКонтрагентовИндивидуальныйПредприниматель
  
  //Добавляем контрагента в базу УНФ
   ДобавитьКлиентаКлиент ВидКонтрагента
  //Создаем нового контрагента и заполняем общие реквищиты
      НовыйКлиент  СправочникиКонтрагентыСоздатьЭлемент
      НовыйКлиентВидКонтрагента  ВидКонтрагента
      НовыйКлиентНаименование  КлиентFullName
      НовыйКлиентНаименованиеПолное  КлиентFullName
      НовыйКлиентПокупатель  
  //Для ЮрЛица и ИП заполняем ИНН
   ВидКонтрагента  ПеречисленияВидыКонтрагентовФизическоеЛицо 
        НовыйКлиентИНН  КлиентINN
  
  //Для ЮрЛица заполняем КПП
   ВидКонтрагента  ПеречисленияВидыКонтрагентовЮридическоеЛицо 
          НовыйКлиентКПП  КлиентKPP
  
  //Заполняем контактные данные
      Телефон  НовыйКлиентКонтактнаяИнформацияДобавить
      ТелефонТип  ПеречисленияТипыКонтактнойИнформацииТелефон
      ТелефонВид  СправочникиВидыКонтактнойИнформацииТелефонКонтрагента
      ТелефонНомерТелефона  КлиентPhone
      ТелефонПредставление  КлиентPhone
  //Записываем клиента в базу
      НовыйКлиентЗаписать
  //Возвращаем ссылку в виде уникального идентификатора (GUID)
   XMLСтрокаНовыйКлиентСсылка
  

Код простой и каких-то особых комментариев не требует.

Публикуем веб-сервис на сервере

Для публикации веб-сервиса должны быть установлены:

  • Веб-сервер (Apache или IIS)
  • Платформа 8.3.7 и выше с установленным расширением веб-сервера

О подготовке рабочего окружения можно прочитать в статье Как настроить обмен 1С с интернет-сервисами.

Для публикации веб-сервиса нужно запустить конфигуратор с правами администратора. Для этого вызываем контекстное меню и выбираем «Запуск от имени администратора»:

Запуск конфигуратора от имени администратора

Рисунок 28. Запускаем конфигуратор от имени администратора

После открываем меню Администрирование->Публикация на веб-сервере. В открывшемся окне заполняем настройки:

Публикация веб-сервиса

Рисунок 29. Публикация веб-сервиса

  • Имя — имя базы для публикации на сервере. Будет являться частью URL.
  • Веб-сервер — на нем будет опубликована база. В нашем случае используется Apache 2.4.
  • Каталог — место на диске, куда будет помещен default.vrd.
  • Публиковать веб-сервисы — отмечаем.
  • Публиковать веб-сервисы расширений по умолчанию — отмечаем, чтобы веб-сервисы были доступны из расширений.
Читайте также:  Слишком большая команда или литерал в ответе сервера

Жмем Опубликовать.

Проверим, что веб-сервис опубликовался. Для этого запустим браузер и в адресной строке введем http://localhost/UNF/ws/Customers.1cws?wsdl. В результате в браузере должен отобразиться XML.

Проверяем работу веб-сервиса

Рисунок 30. Проверяем работу веб-сервиса

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

Чтобы в дальнейшем не отвлекаться на пароли при изучении статьи (тему безопасности мы сознательно опускаем), откроем в текстовом редакторе файл default.vrd, (он лежит в каталоге, указанном при публикации). В него запишем логин и пароль в строке подключения: ib=”File="D:\1CBase\UNF";usr=admin;pwd=12345;”. Логин, пароль и путь должны быть от вашей базы 1С.

Тестируем веб-сервис

Для проверки работоспособности сервера можно создать отдельную базу 1С и добавить в ней обработку ТестВебСервера со следующими реквизитами:

  • FullName, строка(100)
  • INN, строка(12)
  • KPP, строка(9)
  • Phone, строка(20)

Реквизиты выводим на форму и добавляем три кнопки:

  • Создать ФизЛицо
  • Создать ЮрЛицо
  • Создать ИП.

Обработка для проверки веб-сервиса

Рисунок 31. Обработка для проверки веб-сервиса

В модуле формы напишем такой код:

  //1. Обработчики кнопок
  //Обработчик кнопки СоздатьФизЛицо
  
   СоздатьФизЛицоКоманда
      СоздатьКлиентаНаСервере
  

  //Обработчик кнопки СоздатьИП
  
   СоздатьИПКоманда
      СоздатьКлиентаНаСервере
  

  //Обработчик кнопки СоздатьЮрЛицо
  
   СоздатьЮрЛицоКоманда
      СоздатьКлиентаНаСервере
  

  
  
   СоздатьКлиентаНаСервереТипКлиента
      //2. Получаем описание сервиса
      ВСОпределение   WSОпределения
      //3. Создаем прокси для обращения к сервису
      Прокси   WSПроксиВСОпределение kursypo1cruwswsextensionak_Customersak_CustomersSoap
      //4. Получаем тип клиента по URI пространству имен и имени типа
      ТипКлиент  ПроксиФабрикаXDTOТипkursypo1cruwswsextensionТипКлиента);
      //5. Создаем XDTOОбъект заданного типа
      Клиент  ПроксиФабрикаXDTOСоздатьТипКлиент      
      //6. Заполняем данные Клиента данными, введенными в форме
      ЗаполнитьЗначенияСвойствКлиент Объект
      //7. В зависимости от типа клиента вызываем соответствующий метод веб-сервиса
       ТипКлиента   
          ОбъектGUID  ПроксиAddCustomerFLКлиент
       ТипКлиента   
          ОбъектGUID  ПроксиAddCustomerIPКлиент
       ТипКлиента   
          ОбъектGUID  ПроксиAddCustomerULКлиент
      
  

Прокомментируем код:

  1. В обработчиках кнопок вызываем процедуру СоздатьКлиентаНаСервере() и передаем название типа клиента в виде строки.
  2. Получаем WSDL-описание веб сервиса, опубликованного по указанному в параметрах URL. На основании него создается объект WSОпределение.
  3. Создаем объект Прокси для работы с сервисом. Он позволяет обращаться к веб-сервису, вызывая его методы в привычном объектном стиле. В качестве параметров передаем WSОпределение сервиса, созданное на предыдущем шаге, пространство имен веб-сервиса, имя веб-сервиса и точку подключения. Имя точки подключения формируется путем добавления к имени сервиса суффикса Soap (так формирует WSDL 1C).
  4. Получаем тип клиента по URI пространства имен.
  5. На основании типа клиента, полученного на предыдущем шаге, создаем XDTOОбъект Клиент. По структуре этот объект будет соответствовать структуре типа, который мы определяли в нашем XDTO-пакете.
  6. Заполняем значения реквизитов клиента данными, введенными в форме;
  7. В зависимости от переданного в процедуру типа клиента, мы вызываем разные методы веб-сервиса. «Под капотом» этого вызова произойдет сериализация данных в XML, валидация XML, формирование HTTP пакета и отправка его на сервер.

С этой обработкой можно поэксперементировать. Попробуйте создавать клиентов разных типов, введя корректные данные и некорректные. Если вы попытаетесь ввести в ИНН буквы или заполнить телефон, не соблюдая формат, то появится окно ошибки.

Итак, в данной статье мы познакомились с возможностями платформы по разработке веб-сервисов без снятия конфигурации с поддержки. Создали расширение, импортировали в расширение нужные нам объекты метаданных и описали модель данных для обмена. Создали и опубликовали веб-сервис. Написали обработку на 1С для проверки работоспособности этого сервиса.

На этом пока закончим, но не остановимся 🙂

Об авторе

Автор статьи – Алексей Дубровин, г. Челябинск

E-mail: dubrovin1973@gmail.com

Нужно быстро разобраться в работе расширений?

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

Ошибка при создании WSОпределения

Модераторы: Дмитрий Юхтимовский, Лысиков Денис

Ошибка при создании WSОпределения

не проходит проверка веб-сервиса, падает на строке:WS_Определение = Новый WSОпределения(СтруктураПараметров.WSDL_УдаленноеПодключение, СтруктураПараметров.WSDL_Пользователь, СтруктураПараметров.WSDL_Пароль);

сама ошибка:
{ОбщийМодуль.ТехнологическийЖурнал.Модуль(697)}: Ошибка при вызове конструктора (WSОпределения): При создании описания сервиса произошла ошибка. : При создании описания сервиса произошла ошибка. : Ошибка доступа к файлу ‘http://ws:xxxxxxx@skynet.gilev.ru/QueryTJ/ws/QueryTJ.1cws?wsdl’: Ошибка работы с Интернет: Couldn’t connect to server

имя и пароль веб-сервиса указываю ws, подскажите, куда копать?

Дмитрий Калинин
 
Сообщений: 2
Зарегистрирован: 04 мар 2014, 06:40

Re: Ошибка при создании WSОпределения

Гилёв Вячеслав » 05 мар 2014, 20:26

Дмитрий Калинин писал(а):не проходит проверка веб-сервиса, падает на строке:WS_Определение = Новый WSОпределения(СтруктураПараметров.WSDL_УдаленноеПодключение, СтруктураПараметров.WSDL_Пользователь, СтруктураПараметров.WSDL_Пароль);

имя и пароль веб-сервиса указываю ws, подскажите, куда копать?

скорее всего нет “интерната” для учетки, из под которой работает служба сервера 1С

Гилёв Вячеслав
 
Сообщений: 2499
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Ошибка при создании WSОпределения

Дмитрий Калинин » 07 мар 2014, 07:38

Да, действительно, не было интернета у пользователя, под которым запущен сервер 1С.

Дмитрий Калинин
 
Сообщений: 2
Зарегистрирован: 04 мар 2014, 06:40


Вернуться в QueryTJ – Анализ долгих запросов

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Ошибка 405 и 500 в HTTP сервисе 1С. Поиск и устранение.

Добрый день, хотел поделиться с вами результатом преодоления этих ошибок при работе с http сервисами 1С. С данной ошибкой мне пришлось столкнуться при переписывании мобильного приложения с web сервисов на http. Ошибка возникала при отправке http сервису POST запроса.

Ошибка 405

При работе с некорректным HTTP сервисом из мобильного приложения возвращалась ошибка 405, которая указывает на конкретную проблему. «405 Method Not Allowed — указанный клиентом метод нельзя применить к текущему ресурсу.» Долго не мог разобраться с данной ошибкой, так как в сервисе запрос был разрешен и шаблоны были настроены корректно.

Ошибка 500

При работе с некорректным HTTP сервисом из внешних программ возвращалась ошибка 500, которая ни о чем конкретном не говорит. «500 Internal Server Error — любая внутренняя ошибка сервера, которая не входит в рамки остальных ошибок класса».

Ошибка 500

Ошибка 405

Вроде HTTP сервис один, а при использовании запросов к нему из разных программ возвращались разные ошибки.

Расследование ошибок 405 и 500 в HTTP сервисе 1С

Времени на выяснение причин ушло очень много. За несколько дней до этой задачи мною были проведены десятки экспериментов по сборке и настройке web сервера apache 2.4 x64 SSL для работы с 1С. Все настройки в основном были связаны с кросс доменными запросами из web приложения на javascript. Столкнувшись с ошибками 405 и 500 на другом проекте я сразу полез в дебри конфигурации apache. После полного удаления apache поставил IIS и на нем вышла такая же ошибка. Поднял на виртуальной машине чистую систему, попробовал apache и iss, но ошибка так и проявлялась. Потом я вспомнил, что одна функция мобильного приложения уже давно использует http сервис и там все прекрасно работает. Создал http сервис с базовыми настройками и все заработало.

Ошибка 405

Как только я переносил код из web сервиса в функции http сервиса, сразу появлялись ошибки. Самое интересное, что отладка не срабатывала, т.е. POST запрос в пустую функцию приходил и отрабатывал, а в функцию с кодом нет.

Ошибка 405

На многих форумах ошибку 405 описывают как ошибку доступа, либо не корректную настройку http сервиса.

Обновление 12. 2019

В процессе работы часто приходится сталкиваться с ошибками 405 и 500 в HTTP сервисах. Но проблема в 99% случаев в коде сервиса. Возможно это не явно, код вас может уводить глубоко в другие модули, но решение надо искать именно там.

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

В данный момент я начинаю с того, что отключаю вызов всех функций и процедур начиная со входа в обработчики HTTP сервиса и смотрю как проходят запросы. Если все хорошо, то я начинаю включать код небольшими кусочками и проверять работу сервиса. Данный метод не самый быстрый, но дает 100% результат.

Если у вас остались вопросы, то вы можете задать мне их в социальных сетях или оставить комментарий ниже.

Итог разбора ошибок 405 и 500 в HTTP сервисе 1С.

В итоге все оказалось довольно просто. Функция, которая вызывалась внутри функции http сервиса 1с не могла быть вызвана из данного модуля. Странно, что при сохранении конфигурации никакой ошибки на вызов отсутствующей функции не было. Возможно это глюк версии платформы и будет доработан. При использовании web сервисов, даже если код внутри функции был не корректный, отладка работала. В http сервисе сразу идет возврат с ошибками 405 или 500.

P.S. В последней версии платформы ошибка 405 перестала выходить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *