Как опубликовать и проверить работу первого веб-сервиса в 1С: Подробное руководство

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С с внешними системами веб-сервисы (SOAP) и HTTP-сервисы играют ключевую роль. Однако начинающие разработчики часто сталкиваются с трудностями на самом первом этапе: как запустить и проверить свой простейший веб-сервис "Hello World", если под рукой нет выделенного сервера? Существуют ли публичные серверы для тестирования и как правильно настроить окружение на своем рабочем компьютере?

В этой статье мы подробно разберем весь процесс создания, публикации и тестирования веб-сервисов в 1С, решим проблему с типичными ошибками публикации (например, ошибкой 404 Not Found) и рассмотрим пример программного подключения к стороннему веб-сервису.

Собственный веб-сервис или сторонний: в чем разница при тестировании?

Для начала проанализируем базовое различие, в котором часто путаются новички:

  1. Если вы разрабатываете свой веб-сервис в 1С: Вам необходимо предоставить сторонней системе доступ к вашей базе данных. В этом случае "чужой" веб-сервер вам никак не поможет. Вам обязательно нужно развернуть и настроить веб-сервер (например, Apache или IIS) на своем компьютере или в локальной сети, чтобы опубликовать базу наружу.
  2. Если вы хотите научиться работать с веб-сервисами в 1С: Вы можете использовать существующие в интернете публичные веб-сервисы. Отличным примером является сервис проверки орфографии Яндекс.Спеллер. На нем можно потренироваться отправлять запросы и получать ответы из 1С без настройки собственного веб-сервера.

Ниже мы подробно разберем оба сценария.

Шаг 1. Настройка локального веб-сервера Apache

Для публикации собственного веб-сервиса нам понадобится веб-сервер. Наиболее простым и популярным решением для разработчиков является Apache. Рассмотрим основные нюансы его установки и настройки, которые часто упускают из виду:

После установки Apache проверьте его работоспособность, перейдя в браузере по адресу http://localhost/. Если вы видите страницу с текстом "It works!", значит, веб-сервер успешно запущен и готов к работе.

Альтернативный современный вариант: Начиная с версии платформы 8.3.14, в 1С появился автономный сервер (ibsrv.exe). Он содержит встроенный веб-сервер и позволяет автоматически публиковать базу данных без необходимости развертывать полноценный Apache или IIS. Если вы используете среду разработки 1C:EDT, в нее уже встроен Apache, который автоматически конфигурируется при запуске проекта.

Шаг 2. Публикация веб-сервиса из Конфигуратора

После того как веб-сервер подготовлен, выполним публикацию нашей информационной базы и веб-сервиса:

  1. Запустите Конфигуратор 1С от имени Администратора.
  2. Перейдите в меню Администрирование — Публикация на веб-сервере...
  3. В открывшемся окне укажите имя публикации (например, test) и выберите тип веб-сервера (Apache 2.4).
  4. Укажите каталог для публикации (например, D:\1c\test_pub\). Рекомендуется создавать для этого отдельную пустую папку.
  5. На вкладке "Web-сервисы" установите флажки напротив тех веб-сервисов конфигурации, которые вы хотите опубликовать. Также убедитесь, что стоит галочка "Публиковать Web-сервисы по умолчанию".
  6. Нажмите кнопку "Опубликовать". На предложение перезапустить службу веб-сервера ответьте согласием.

В результате публикации в указанном каталоге создастся файл настроек default.vrd, а в конфигурационный файл Apache будут внесены соответствующие изменения.

Шаг 3. Как правильно составить URL для проверки работы веб-сервиса

Частая ошибка новичков заключается в попытке открыть в браузере адрес каталога публикации, например http://localhost/test/. В ответ сервер выдает ошибку "404 Not Found". Это происходит потому, что в каталоге публикации нет веб-страниц для отображения, там находится только служебный файл описания публикации.

Чтобы проверить работоспособность конкретного веб-сервиса и получить его WSDL-описание, необходимо составить адрес по строгому шаблону:

http://localhost/{ИмяПубликации}/ws/{ИмяВебСервиса}?wsdl

Разберем параметры этого адреса:

Таким образом, корректный адрес для проверки в браузере будет выглядеть так:

http://localhost/test/ws/wa_LengthString?wsdl

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

Шаг 4. Пример работы с внешним SOAP-сервисом (Яндекс.Спеллер)

Если вам нужно протестировать сам механизм обращения к веб-сервисам из кода 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);
    Иначе
        Возврат "Ошибок не обнаружено";
    КонецЕсли;

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

Шаг 5. Специализированный софт для тестирования

Для полноценного тестирования веб-сервисов обычного браузера недостаточно. Браузер может выполнять только простейшие GET-запросы для просмотра WSDL-схемы. Чтобы смоделировать реальные запросы с передачей параметров (вызовом методов), используют специализированные инструменты:

Шаг 6. Как протестировать локальный веб-сервис из интернета без хостинга

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

Вы можете воспользоваться утилитами создания безопасных туннелей, такими как ngrok или LocalTunnel. Эти программы запускаются на локальном ПК одной командой в консоли и создают временный публичный адрес в интернете (например, https://your-temp-link.ngrok-free.app), который перенаправляет все запросы на ваш локальный порт (например, порт 80, где запущен Apache). Это позволяет тестировать интеграцию с любыми внешними облачными системами прямо на вашем рабочем компьютере.

Почему в современной разработке HTTP-сервисы предпочтительнее Web-сервисов (SOAP)?

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

  1. Формат обмена данными: SOAP-сервисы жестко привязаны к формату XML и требуют строгого описания типов данных через XDTO-пакеты. HTTP-сервисы работают в концепции REST и могут обмениваться легкими, интуитивно понятными данными в формате JSON. JSON проще читать человеку, он весит значительно меньше и поддерживается "из коробки" в любых современных языках программирования.
  2. Производительность: Парсинг XML-пакетов веб-сервисов требует больше вычислительных мощностей процессора. Парсинг JSON в HTTP-сервисах происходит быстрее, что критично при больших объемах данных.
  3. Простота разработки и отладки: Написать обработчик для HTTP-сервиса в 1С проще, так как вы напрямую управляете HTTP-запросом и HTTP-ответом. Интеграция со стороны внешнего сайта или мобильного приложения к вашему HTTP-сервису пишется в разы быстрее, чем подключение к тяжеловесному SOAP.

Используйте Web-сервисы (SOAP) в тех случаях, когда интегрируемые системы строго требуют наличия схемы WSDL для автоматической генерации классов, либо при интеграции между двумя базами 1С. В остальных современных сценариях интеграции (с сайтами, мобильными приложениями, внешними API) делайте выбор в пользу HTTP-сервисов.

← На главную