При интеграции 1С с внешними системами веб-сервисы (SOAP) и HTTP-сервисы играют ключевую роль. Однако начинающие разработчики часто сталкиваются с трудностями на самом первом этапе: как запустить и проверить свой простейший веб-сервис "Hello World", если под рукой нет выделенного сервера? Существуют ли публичные серверы для тестирования и как правильно настроить окружение на своем рабочем компьютере?
В этой статье мы подробно разберем весь процесс создания, публикации и тестирования веб-сервисов в 1С, решим проблему с типичными ошибками публикации (например, ошибкой 404 Not Found) и рассмотрим пример программного подключения к стороннему веб-сервису.
Для начала проанализируем базовое различие, в котором часто путаются новички:
Ниже мы подробно разберем оба сценария.
Для публикации собственного веб-сервиса нам понадобится веб-сервер. Наиболее простым и популярным решением для разработчиков является Apache. Рассмотрим основные нюансы его установки и настройки, которые часто упускают из виду:
wsap24.dll) прописывается в конфигурационном файле Apache httpd.conf, и при несовпадении разрядности служба веб-сервера просто не запустится.После установки Apache проверьте его работоспособность, перейдя в браузере по адресу http://localhost/. Если вы видите страницу с текстом "It works!", значит, веб-сервер успешно запущен и готов к работе.
Альтернативный современный вариант: Начиная с версии платформы 8.3.14, в 1С появился автономный сервер (ibsrv.exe). Он содержит встроенный веб-сервер и позволяет автоматически публиковать базу данных без необходимости развертывать полноценный Apache или IIS. Если вы используете среду разработки 1C:EDT, в нее уже встроен Apache, который автоматически конфигурируется при запуске проекта.
После того как веб-сервер подготовлен, выполним публикацию нашей информационной базы и веб-сервиса:
test) и выберите тип веб-сервера (Apache 2.4).D:\1c\test_pub\). Рекомендуется создавать для этого отдельную пустую папку.В результате публикации в указанном каталоге создастся файл настроек default.vrd, а в конфигурационный файл Apache будут внесены соответствующие изменения.
Частая ошибка новичков заключается в попытке открыть в браузере адрес каталога публикации, например http://localhost/test/. В ответ сервер выдает ошибку "404 Not Found". Это происходит потому, что в каталоге публикации нет веб-страниц для отображения, там находится только служебный файл описания публикации.
Чтобы проверить работоспособность конкретного веб-сервиса и получить его WSDL-описание, необходимо составить адрес по строгому шаблону:
http://localhost/{ИмяПубликации}/ws/{ИмяВебСервиса}?wsdl
Разберем параметры этого адреса:
localhost — ваш локальный компьютер (или IP-адрес сервера в сети).ИмяПубликации — имя, которое вы указали в Конфигураторе при публикации (в нашем примере — test).ws — обязательный служебный признак того, что мы обращаемся к SOAP-сервису.ИмяВебСервиса — имя объекта метаданных "Web-сервис" из дерева конфигурации 1С (а не имя файла публикации .1cws).?wsdl — параметр, запрашивающий XML-схему веб-сервиса.Таким образом, корректный адрес для проверки в браузере будет выглядеть так:
http://localhost/test/ws/wa_LengthString?wsdl
Если адрес составлен верно, в окне браузера вы увидите структурированный XML-код схемы вашего веб-сервиса. Это означает, что публикация прошла успешно и сервис готов принимать запросы.
Если вам нужно протестировать сам механизм обращения к веб-сервисам из кода 1С, рассмотрим, как программно "приготовить" запрос к стороннему сервису. Нам понадобятся системные объекты платформы: WSОпределения, WSПрокси и ФабрикаXDTO.
Рассмотрим по шагам пример функции, которая передает текст внешнему сервису Яндекс.Спеллер для проверки орфографии и возвращает слова, содержащие ошибки:
&НаСервере
Функция ПроверитьТекстНаОшибки(ТекстДляПроверки) Экспорт
// Шаг 1. Создаем определение веб-сервиса по адресу WSDL схемы
АдресWSDL = "http://speller.yandex.net/services/spellservice?WSDL";
МинутаОжидания = 60;
Попытка
WSОпределение = Новый WSОпределения(АдресWSDL, "", "", , МинутаОжидания);
Исключение
ВызватьИсключение "Не удалось получить WSDL-описание сервиса: " + ОписаниеОшибки();
КонецПопытки;
// Шаг 2. Создаем прокси для обращения к операциям веб-сервиса
// Параметры: WSОпределения, ПространствоИмен, ИмяСервиса, ИмяПорта
ПространствоИмен = "http://speller.yandex.net/services/spellservice";
WSПрокси = Новый WSProxy(WSОпределение, ПространствоИмен, "SpellService", "SpellServiceSoap", , МинутаОжидания);
// Шаг 3. Создаем пакет данных XDTO для передачи параметров запроса
// Для этого используем фабрику XDTO, привязанную к нашему прокси
ТипЗапроса = WSПрокси.ФабрикаXDTO.Тип(ПространствоИмен, "CheckTextRequest");
ПакетПараметров = WSПрокси.ФабрикаXDTO.Создать(ТипЗапроса);
// Заполняем свойства пакета в соответствии со схемой WSDL
ПакетПараметров.options = 55;
ПакетПараметров.format = "plain";
ПакетПараметров.lang = "ru";
ПакетПараметров.text = ТекстДляПроверки;
// Шаг 4. Вызываем удаленную операцию веб-сервиса
Попытка
РезультатВебОперации = WSПрокси.checkTexts(ПакетПараметров);
Исключение
ВызватьИсключение "Ошибка при выполнении запроса к веб-сервису: " + ОписаниеОшибки();
КонецПопытки;
// Шаг 5. Обрабатываем полученный результат
СловаСОшибками = "";
// Обходим коллекцию ошибок, возвращенную сервисом
Если РезультатВебОперации.ArrayOfSpellResult.SpellResult.Количество() > 0 Тогда
Для каждого ГрамОшибка из РезультатВебОперации.ArrayOfSpellResult.SpellResult[0].error Цикл
СловаСОшибками = СловаСОшибками + "'" + Строка(ГрамОшибка.word) + "', ";
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(СловаСОшибками) Тогда
// Отрезаем лишнюю запятую и пробел в конце строки
Возврат Лев(СловаСОшибками, СтрДлина(СловаСОшибками) - 2);
Иначе
Возврат "Ошибок не обнаружено";
КонецЕсли;
КонецФункции
Для полноценного тестирования веб-сервисов обычного браузера недостаточно. Браузер может выполнять только простейшие GET-запросы для просмотра WSDL-схемы. Чтобы смоделировать реальные запросы с передачей параметров (вызовом методов), используют специализированные инструменты:
http://localhost/test/ws/wa_LengthString?wsdl), и программа автоматически генерирует структуры XML-запросов для каждого метода. Вам остается только вписать параметры и нажать кнопку отправки, чтобы увидеть ответ сервера.POST-запросов к SOAP-сервисам с передачей XML-тела в сыром виде (raw/xml).Что делать, если вам нужно протестировать интеграцию с облачным сервисом, который должен присылать ответы на ваш веб-сервис, но ваш компьютер находится за роутером и не имеет белого IP-адреса? Покупать хостинг или арендовать VPS для этого не обязательно.
Вы можете воспользоваться утилитами создания безопасных туннелей, такими как ngrok или LocalTunnel. Эти программы запускаются на локальном ПК одной командой в консоли и создают временный публичный адрес в интернете (например, https://your-temp-link.ngrok-free.app), который перенаправляет все запросы на ваш локальный порт (например, порт 80, где запущен Apache). Это позволяет тестировать интеграцию с любыми внешними облачными системами прямо на вашем рабочем компьютере.
В ходе обсуждения веб-сервисов разработчики часто упоминают более современную альтернативу — HTTP-сервисы. Рассмотрим, почему в современной практике интеграции систем все чаще отдают предпочтение именно им:
Используйте Web-сервисы (SOAP) в тех случаях, когда интегрируемые системы строго требуют наличия схемы WSDL для автоматической генерации классов, либо при интеграции между двумя базами 1С. В остальных современных сценариях интеграции (с сайтами, мобильными приложениями, внешними API) делайте выбор в пользу HTTP-сервисов.