Передача файлов в 1С через веб-сервисы — задача распространенная, но при возникновении ограничений на стороне сервера она может стать настоящим испытанием для разработчика. Если вы столкнулись с тем, что файлы до 3 Мб успешно загружаются, а более крупные — «исчезают» без ошибок в Журнале регистрации, давайте вместе разберем пошаговый алгоритм поиска неисправностей.
В большинстве случаев проблема кроется в настройках безопасности веб-сервера, который «отбрасывает» пакеты, превышающие установленный размер. Рассмотрим настройки IIS, так как именно они чаще всего являются камнем преткновения.
Для изменения максимально допустимого размера содержимого воспользуйтесь командной строкой (от имени администратора), чтобы задать лимит в 100 Мб (значение указано в байтах):
cd c:\Windows\System32\inetsrv
appcmd set config "Default Web Site" -section:requestFiltering -requestLimits.maxAllowedContentLength:104857600 -commitpath:apphost
После выполнения команды обязательно перезапустите службы IIS через диспетчер служб. Также проверьте параметр maxRequestLength в файле web.config, который ограничивает размер запроса в килобайтах. Если он не задан явно, по умолчанию значение может быть очень малым.
Если в качестве «прослойки» между пользователем и 1С используется сайт на языке PHP, необходимо убедиться, что ограничения PHP не блокируют поток данных до его передачи в 1С. В файле php.ini проверьте следующие параметры:
upload_max_filesize — максимальный размер загружаемого файла.post_max_size — максимальный размер данных, отправляемых методом POST.memory_limit — объем памяти, доступный скрипту для обработки запроса.После внесения изменений в php.ini критически важно выполнить перезапуск службы PHP (или всего веб-сервера), иначе новые настройки не применятся.
Иногда лимиты прописаны непосредственно в коде веб-страницы. Проанализируем HTML-форму, через которую происходит загрузка. Поищите наличие скрытого поля MAX_FILE_SIZE. Если оно присутствует, браузер будет блокировать передачу файлов, превышающих указанный там размер, еще до того, как они покинут компьютер пользователя.
Также стоит проверить исходный код PHP-скрипта на наличие проверок типа $_FILES['file']['size']. Программист мог поставить жесткое ограничение на уровне логики сайта, которое не проявляется в логах 1С, так как запрос просто не доходит до платформы.
Чтобы понять, где именно теряется файл — в сети, в настройках сайта или в 1С, попробуем провести чистый эксперимент. Создайте внешнюю обработку в 1С, которая будет сама к себе обращаться через опубликованный веб-сервис (на той же машине, где стоит сервер 1С).
Это позволит:
Технологическим журналом без сетевых помех.Если ошибка не видна в стандартном Журнале регистрации, значит, соединение обрывается на уровне протокола или платформы. Настройте Технологический журнал на события EXCP (исключения) и SCALL (вызовы). Это позволит увидеть записи в момент обрыва, что поможет понять, какой компонент платформы 1С инициирует закрытие соединения.
Важное примечание: Помните, что передача данных через веб-сервисы 1С (SOAP/XML) требует кодирования в Base64. Это увеличивает размер передаваемых бинарных данных примерно на 30–33%. Если лимит на сервере равен 3 Мб, то файл размером 2.2 Мб в исходном виде при передаче превратится в поток данных, превышающий 3 Мб, что и вызовет ошибку. Всегда учитывайте этот коэффициент при установке лимитов!
Проанализировав все вышеперечисленные уровни — от параметров IIS/Apache до кода сайта и специфики кодирования в 1С, — вы сможете гарантированно обнаружить «узкое место» и настроить корректную работу системы.