Как правильно опубликовать Web-сервис в 1С и избежать ошибки 404 при вызове

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

Разработка и публикация веб-сервисов (SOAP) в среде 1С:Предприятие — это стандартная задача при организации межсистемного обмена данными. Однако начинающие разработчики часто сталкиваются с тем, что после успешной, казалось бы, публикации на веб-сервере (IIS или Apache), при попытке обращения к сервису возникает ошибка HTTP: Not found (404). Разберем подробно, как правильно настроить пространство имен, сформировать корректный URL и организовать передачу параметров так, чтобы обмен работал стабильно.

Разбор структуры URL для доступа к веб-сервису

Первая и самая распространенная причина ошибки 404 заключается в неправильном понимании структуры ссылки, по которой доступен файл описания веб-сервиса (WSDL). Рассмотрим стандартный шаблон формирования адреса для обращения к сервису 1С. Проанализируем типичную ситуацию: системный администратор опубликовал базу, но веб-сервис не открывается.

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

http://[ИмяСервера]/[ИмяПубликации]/ws/[ИмяФайлаСервиса].1cws?wsdl

Разберем по шагам каждый элемент этого адреса:

  1. ИмяСервера — это адрес вашего веб-сервера (например, localhost, IP-адрес или доменное имя).
  2. ИмяПубликации — имя, которое было указано в конфигураторе при выполнении команды "Администрирование — Публикация на веб-сервере".
  3. /ws/ — это критически важный сегмент. Многие разработчики забывают его добавить. Именно этот путь указывает веб-серверу, что запрос должен быть передан обработчику веб-сервисов 1С. Без этого сегмента сервер будет искать физический файл в папке публикации и, не найдя его, вернет ошибку 404.
  4. ИмяФайлаСервиса.1cws — это значение свойства Имя файла публикации в метаданных вашего Web-сервиса в конфигураторе. Обратите внимание, что оно может отличаться от имени самого объекта в дереве метаданных.
  5. ?wsdl — параметр, который заставляет 1С сформировать и отдать XML-описание интерфейса сервиса.

Если при попытке открыть базу через браузер она загружается нормально, а сервис выдает 404, скорее всего, проблема именно в отсутствии префикса /ws/ в строке адреса.

Пространство имен (Namespace URI) и его роль

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

Пространство имен — это уникальный идентификатор типов данных и методов вашего сервиса. Оно не обязано быть реальной ссылкой на существующий сайт. Это просто строка, которая позволяет отличить ваш тип Заказ от типа Заказ другого сервиса. Однако общепринятым стандартом является использование формата URI, например: http://www.yourcompany.ru/exchange/zup_to_erp.

Важные моменты при настройке пространства имен:

Настройка файла конфигурации публикации (default.vrd)

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

Пример правильной настройки в файле default.vrd:


<ws>
    <point name="ObmenWSZUP"
           alias="ObmenWSZUP.1cws"
           enable="true"
           reuseSessions="autouse"
           sessionMaxAge="20"
           poolSize="10"
           poolTimeout="5"/>
</ws>

Если в этом файле отсутствует параметр enable="true" или сам тег point для вашего сервиса, вы получите ошибку доступа. При публикации через конфигуратор 1С делает это автоматически, но при ручной правке или переносе настроек системными администраторами возможны ошибки.

Организация передачи параметров: проблемы и решения

Рассмотрим ситуацию, когда сервис опубликован, но при вызове методов возникают ошибки, связанные с количеством или типами параметров. В 1С существует два основных подхода к передаче данных через Web-сервисы.

Способ 1: Множественные параметры (Классический)

Вы определяете каждый параметр (например, ДатаНачала, Организация, МассивДанных) в метаданных метода. Этот способ кажется наглядным, но он очень чувствителен к типам данных. Если вы передадите строку вместо даты или NULL там, где ожидается объект, платформа выдаст ошибку еще до того, как управление будет передано в программный код модуля сервиса.

Способ 2: Передача сериализованных данных в одной строке

Это наиболее надежный и гибкий метод, который рекомендуют опытные разработчики. Вместо множества параметров вы создаете один входной параметр с типом string (или base64Binary для двоичных данных). Всю структуру данных вы упаковываете в XML или JSON на стороне отправителя и распаковываете на стороне получателя.

Посмотрим на пример кода для подготовки данных к отправке через сериализатор XDTO:


// На стороне отправителя
ПараметрыДляWS = Новый Структура;
ПараметрыДляWS.Вставить("ДатаЗагрузки", ТекущаяДата());
ПараметрыДляWS.Вставить("СписокКодов", МассивСсылок);

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();

// Используем глобальную фабрику XDTO для преобразования структуры в XML
СериализаторXDTO.ЗаписатьXML(Запись, ПараметрыДляWS);
ДанныеДляОтправки = Запись.Закрыть();

// Теперь строку ДанныеДляОтправки передаем в единственный строковый параметр WS-метода

Разберем преимущества такого подхода:

  1. Стабильность: Вам не нужно менять структуру веб-сервиса и переопубликовывать его каждый раз, когда меняется состав передаваемых полей.
  2. Простота отладки: Вы всегда можете сохранить переданную строку в текстовый файл и проанализировать её содержимое.
  3. Минимизация ошибок типизации: Платформа не блокирует запрос на этапе парсинга SOAP, и вы можете обработать любые данные внутри кода 1С, используя конструкцию Попытка ... Исключение.

Технические нюансы настройки IIS

Проанализируем работу расширения wsisapi.dll. Если база 1С работает под управлением IIS, важно убедиться, что пул приложений настроен корректно. Часто возникают конфликты разрядности. Если у вас установлена 64-битная платформа 1С, путь к расширению в настройках обработчика IIS должен вести в папку bin 64-битной версии. Если же используется 32-битная платформа, необходимо в расширенных настройках пула приложений IIS установить свойство Разрешить 32-разрядные приложения (Enable 32-Bit Applications) в значение True.

Также проверьте права доступа пользователя, от имени которого запущен веб-сервер. Этот пользователь должен иметь права на чтение и выполнение в каталоге установки 1С (папка bin), иначе компоненты веб-сервиса просто не смогут инициализироваться, и система выдаст ошибку 500 или 404.

В завершение подчеркнем: успешная работа веб-сервиса складывается из трех составляющих: правильного URL (с сегментом /ws/), корректной регистрации в файле default.vrd и согласованности типов данных через фабрику XDTO. Следуя этим правилам, вы сможете настроить надежный обмен данными между любыми информационными системами.

← На главную