Развертывание веб-сервисов 1С на виртуальных машинах в облачных инфраструктурах (таких как VK Cloud, ранее mcs.mail.ru) — стандартная задача для интеграции систем. Однако при первой настройке разработчики часто сталкиваются с тем, что сервис «не виден» извне. В этой статье мы подробно разберем, как пройти путь от установки Apache до успешного вызова метода веб-сервиса, проанализируем типичные ошибки с брандмауэром, SSL-сертификатами и пространствами имен.
Представим сценарий: на виртуальной машине установлен веб-сервер Apache, база 1С опубликована, но при попытке подключения через код 1С или браузер возникает ошибка. Рассмотрим стандартный фрагмент кода, с которого обычно начинается работа:
ссл = Новый ЗащищенноеСоединениеOpenSSL;
всОпред = Новый WSОпределения("http://" + IP + "/WebServices/ws/nsi.1cws?wsdl", "user", "password", , , ссл);
Если этот код не отрабатывает, причину нужно искать последовательно на нескольких уровнях: сетевом, системном и прикладном (внутри самой 1С).
Прежде чем отлаживать программный доступ к WSОпределения, необходимо убедиться, что сам веб-сервер и расширение 1С работают корректно. Проанализируем ситуацию: открывается ли база через браузер? Рассмотрим порядок действий:
http://[Ваш_IP]/[Имя_Публикации].Работа в облаке (VK Cloud и другие) накладывает дополнительные ограничения. Выясним причину, почему пакеты могут не доходить до виртуальной машины. Даже если внутри операционной системы (Windows/Linux) брандмауэр отключен, существует внешний периметр безопасности.
Группы безопасности (Security Groups): В консоли управления облаком необходимо проверить правила входящего трафика. Для работы веб-сервисов должны быть открыты порты:
Внутренний брандмауэр ОС: Если на виртуальной машине установлена Windows, проверьте правила Advanced Firewall. Нужно создать разрешающее правило для входящих подключений по порту 80/443 или для процесса httpd.exe (Apache).
Разберем ситуацию, когда используется ЗащищенноеСоединениеOpenSSL. В 1С этот объект по умолчанию проверяет валидность сертификата сервера. Если вы используете самоподписанный сертификат или еще не настроили SSL на Apache, попытка подключения по HTTPS завершится неудачей.
Если вы только начинаете настройку, попробуйте временно исключить SSL из уравнения:
http:// вместо https://.ссл из конструктора Новый WSОпределения.Если же работа через HTTPS обязательна, рассмотрим использование бесплатных сертификатов Let's Encrypt. Это позволит избежать ошибок доверия в 1С без добавления сертификатов в локальные хранилища на каждом клиентском компьютере.
Проанализируем процесс публикации. В Конфигураторе 1С через меню "Администрирование" -> "Публикация на веб-сервере" должны быть установлены соответствующие флажки на вкладке "Веб-сервисы". После публикации 1С создает файл default.vrd. Проверим его содержимое, оно должно выглядеть примерно так:
<ws>
<service name="ExchangeShop"
alias="nsi.1cws"
enable="true"
publishExtensionsByDefault="true" />
</ws>
Важно помнить: после любого изменения в составе веб-сервисов или их методов в Конфигураторе, необходимо **перезапустить Apache**, так как он кэширует структуру публикации при старте модуля 1С.
Выясним причину одной из самых коварных ошибок: когда WSОпределения создаются успешно, но при попытке создать WSПрокси система сообщает, что сервис не найден. Рассмотрим, в чем здесь кроется секрет.
В 1С при создании прокси-класса требуется указать Пространство имен (Namespace) сервиса. Часто разработчики ошибочно указывают там URL-адрес публикации или IP-адрес сервера. Посмотрим на правильный пример:
// 1. Получаем определения (здесь указываем URL к WSDL)
URL_WSDL = "http://" + IP + "/WebServices/ws/nsi.1cws?wsdl";
Определения = Новый WSОпределения(URL_WSDL, Логин, Пароль);
// 2. Создаем прокси
// ОШИБКА: Прокси = Новый WSПрокси(Определения, "http://" + IP + "/WebServices/", "ExchangeShop", "ExchangeShopSoap");
// ПРАВИЛЬНО: Используем URI пространства имен из свойств веб-сервиса в Конфигураторе
ПространствоИмен = "http://www.my-company.ru/exchange";
Прокси = Новый WSПрокси(Определения, ПространствоИмен, "ExchangeShop", "ExchangeShopSoap");
Важный момент: Пространство имен — это уникальный идентификатор вашего сервиса в формате URI (обычно задается в свойствах веб-сервиса в дереве метаданных). Оно не обязано быть рабочим URL-адресом, но должно строго совпадать в Конфигураторе и в коде вызова.
httpd.conf.default.vrd присутствует описание вашего веб-сервиса, и его имя совпадает с именем в метаданных.WSОпределения используется URL с суффиксом ?wsdl, а для WSПрокси используется корректное Пространство имен из свойств объекта в 1С.Следуя этой структуре, мы сможем последовательно исключить все возможные точки отказа и обеспечить стабильную работу интеграции между базами 1С и внешними потребителями данных.