Переход на новые версии платформы 1С:Предприятие (начиная с 8.3.21, 8.3.22 и 8.3.23) часто сопровождается неожиданными проблемами в работе веб-сервисов. Одной из самых распространенных ситуаций является получение ошибки 404 Not Found при попытке обращения к ранее стабильно работавшим HTTP-сервисам. Рассмотрим детально, почему это происходит и как восстановить работоспособность системы.
Проанализируем ситуацию, с которой столкнулся автор темы. При обновлении с версии 8.3.20 на 8.3.23 часто совершается критическая ошибка — использование специализированного дистрибутива «Cервер 1С:Предприятия (64-bit)» вместо полного комплекта поставки. Выясним, почему это важно.
Начиная с версий 8.3.20/8.3.21, компания «1С» существенно изменила состав инсталляционных пакетов. Если раньше многие компоненты были взаимозаменяемы или дублировались, то теперь использование «тонкого» или чисто «серверного» дистрибутива может привести к отсутствию необходимых библиотек для взаимодействия с веб-сервером (IIS или Apache). Модули расширения веб-сервера требуют специфических зависимостей, которые корректно регистрируются в системе только при использовании Windows Full Installer (полная установка платформы).
Рассмотрим шаги для исправления, если вы установили только серверную часть:
setup.exe из архива полной версии).Если полная переустановка платформы не помогла, нам необходимо проверить код самих запросов. Злые языки (и официальная документация) подтверждают, что в новых версиях 1С ужесточила соблюдение стандартов HTTP. Рассмотрим важный аспект: тело запроса в GET-операциях.
В старых версиях (до 8.3.20 включительно) платформа позволяла обрабатывать GET-запросы, содержащие тело (body). Однако, согласно стандартам RFC, GET-запрос не должен иметь полезной нагрузки в теле. Начиная с версии 8.3.21, если веб-сервер получает GET или DELETE запрос с телом, он может вернуть ошибку 404 или 405, так как модуль расширения 1С теперь более строго интерпретирует такие вызовы.
Посмотрим на пример того, как нельзя делать в новых версиях:
// ПРИМЕР ОШИБКИ: Попытка отправить данные в теле GET-запроса
// На платформе 8.3.23 это приведет к ошибке 404
Запрос = Новый HTTPЗапрос("/hs/MyService/v1/GetData");
Запрос.УстановитьТелоИзСтроки("{\"id\": 123}"); // ТАК ДЕЛАТЬ НЕЛЬЗЯ
Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);
Вместо этого используйте параметры URL или смените метод на POST, если передача тела необходима. Проанализируйте логи веб-сервера, чтобы убедиться, не является ли это причиной отказа.
Иногда простая перепубликация не заменяет пути в конфигурационных файлах веб-сервера корректно, особенно если в системе установлено несколько версий платформы. Выясним, как проверить это вручную. Для IIS основным файлом является web.config, расположенный в каталоге публикации.
Найдите строку, указывающую на библиотеку wsisapi.dll. Она должна соответствовать разрядности вашего пула приложений и версии установленной платформы. Посмотрим на структуру пути:
<!-- Пример корректного пути для 64-битной платформы 8.3.23 -->
<add name="1C_Web_Extension"
path="*"
verb="*"
modules="IsapiModule"
scriptProcessor="C:\Program Files\1cv8\8.3.23.2040\bin\wsisapi.dll"
resourceType="Unspecified"
requireAccess="Execute" />
Важный нюанс: Если вы вручную меняете путь в web.config с версии 8.3.20 на 8.3.23, убедитесь, что в системном окружении (PATH) или в настройках прав доступа нет конфликтов. Модуль wsisapi.dll новой версии может зависеть от библиотек Visual C++ Redistributable, которые не поставляются с «урезанным» серверным инсталлятором, о чем мы говорили в первом пункте.
После обновления платформы создается новая папка в C:\Program Files\1cv8\. Часто системные администраторы забывают, что пользователь, от имени которого запущен веб-сервер (например, IIS_IUSRS), должен иметь права на чтение и выполнение в этой новой директории. Если прав недостаточно, веб-сервер не сможет загрузить wsisapi.dll, что в некоторых конфигурациях IIS интерпретируется как 404 (ресурс не найден), так как обработчик не смог инициализироваться.
Рекомендуем выполнить следующие действия:
C:\Program Files\1cv8\8.3.23.XXXX\bin.IIS_IUSRS (или IUSR) имеет права «Чтение и выполнение», «Список содержимого папки», «Чтение».Проанализируем еще одно изменение, замеченное в последних релизах 8.3.22/8.3.23. Платформа стала более чувствительна к регистру символов в URL HTTP-сервисов. Если в метаданных конфигурации ваш сервис называется MyExchange, а корень URL — v1, то обращение по пути /myexchange/V1/ может вернуть 404. Ранее платформа прощала такие различия, теперь же рекомендуется строго соблюдать регистр, указанный в конфигураторе 1С.
Для восстановления работы HTTP-сервисов после обновления платформы, выполните проверку по шагам:
setup.exe из полного дистрибутива, а не через msi-пакет только для сервера.False для 64-битной wsisapi.dll).default.vrd указано корректное имя базы и настройки доступа к HTTP-сервисам (параметр httpServices должен быть разрешен).Соблюдение этих правил позволит вам избежать большинства проблем, связанных с обновлением инфраструктуры веб-сервисов на современных версиях платформы 1С.