Разработка и публикация веб-сервисов (SOAP) в среде 1С:Предприятие — это стандартная задача при организации межсистемного обмена данными. Однако начинающие разработчики часто сталкиваются с тем, что после успешной, казалось бы, публикации на веб-сервере (IIS или Apache), при попытке обращения к сервису возникает ошибка HTTP: Not found (404). Разберем подробно, как правильно настроить пространство имен, сформировать корректный URL и организовать передачу параметров так, чтобы обмен работал стабильно.
Первая и самая распространенная причина ошибки 404 заключается в неправильном понимании структуры ссылки, по которой доступен файл описания веб-сервиса (WSDL). Рассмотрим стандартный шаблон формирования адреса для обращения к сервису 1С. Проанализируем типичную ситуацию: системный администратор опубликовал базу, но веб-сервис не открывается.
Правильный формат ссылки для протокола SOAP выглядит следующим образом:
http://[ИмяСервера]/[ИмяПубликации]/ws/[ИмяФайлаСервиса].1cws?wsdl
Разберем по шагам каждый элемент этого адреса:
localhost, IP-адрес или доменное имя).Имя файла публикации в метаданных вашего Web-сервиса в конфигураторе. Обратите внимание, что оно может отличаться от имени самого объекта в дереве метаданных.Если при попытке открыть базу через браузер она загружается нормально, а сервис выдает 404, скорее всего, проблема именно в отсутствии префикса /ws/ в строке адреса.
Рассмотрим вопрос пространства имен. Проанализируем ситуацию: влияет ли то, что написано в поле Пространство имен в свойствах веб-сервиса, на работоспособность публикации? Ответ — напрямую не влияет, но крайне важно для корректной работы протокола SOAP.
Пространство имен — это уникальный идентификатор типов данных и методов вашего сервиса. Оно не обязано быть реальной ссылкой на существующий сайт. Это просто строка, которая позволяет отличить ваш тип Заказ от типа Заказ другого сервиса. Однако общепринятым стандартом является использование формата URI, например: http://www.yourcompany.ru/exchange/zup_to_erp.
Важные моменты при настройке пространства имен:
Выясним причину, по которой даже при правильной ссылке сервис может быть недоступен. Основные настройки публикации хранятся в файле 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-сервисы.
Вы определяете каждый параметр (например, ДатаНачала, Организация, МассивДанных) в метаданных метода. Этот способ кажется наглядным, но он очень чувствителен к типам данных. Если вы передадите строку вместо даты или NULL там, где ожидается объект, платформа выдаст ошибку еще до того, как управление будет передано в программный код модуля сервиса.
Это наиболее надежный и гибкий метод, который рекомендуют опытные разработчики. Вместо множества параметров вы создаете один входной параметр с типом string (или base64Binary для двоичных данных). Всю структуру данных вы упаковываете в XML или JSON на стороне отправителя и распаковываете на стороне получателя.
Посмотрим на пример кода для подготовки данных к отправке через сериализатор XDTO:
// На стороне отправителя
ПараметрыДляWS = Новый Структура;
ПараметрыДляWS.Вставить("ДатаЗагрузки", ТекущаяДата());
ПараметрыДляWS.Вставить("СписокКодов", МассивСсылок);
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
// Используем глобальную фабрику XDTO для преобразования структуры в XML
СериализаторXDTO.ЗаписатьXML(Запись, ПараметрыДляWS);
ДанныеДляОтправки = Запись.Закрыть();
// Теперь строку ДанныеДляОтправки передаем в единственный строковый параметр WS-метода
Разберем преимущества такого подхода:
Попытка ... Исключение.Проанализируем работу расширения 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. Следуя этим правилам, вы сможете настроить надежный обмен данными между любыми информационными системами.