При работе с веб-сервисами, HTTP-запросами или при публикации информационной базы 1С на веб-сервере Internet Information Services (IIS), администраторы и разработчики часто сталкиваются с проблемой передачи больших объемов данных. Типичный сценарий: небольшие запросы проходят успешно, но при попытке передать крупный файл или массив данных возникает ошибка: «Недостаточно свободной памяти для выполнения операции» или «Неспецифицированная ошибка работы с ресурсом» при выполнении POST-запроса к ресурсу /e1cib/logForm.
Важно понимать, что наличие большого объема физической оперативной памяти на сервере (например, 96 ГБ) не гарантирует автоматического решения проблемы. В IIS и программной среде ASP.NET установлены жесткие лимиты «по умолчанию», предназначенные для защиты сервера от DoS-атак. Разберем пошагово, как найти и изменить эти ограничения, чтобы обеспечить стабильную работу 1С.
Прежде чем приступать к настройкам, проанализируем ситуацию. Когда клиент (например, другая база 1С) отправляет POST-запрос, пакет данных проходит через несколько уровней фильтрации и обработки:
Рассмотрим подробнее каждый из этих этапов и выясним, где именно вносятся изменения.
Первый барьер, с которым сталкивается запрос — это модуль фильтрации. Если размер POST-запроса превышает установленный лимит, сервер просто сбросит соединение или выдаст ошибку 413.1.
Для изменения этого лимита нам необходимо отредактировать параметр maxAllowedContentLength. Значение здесь указывается в байтах. По умолчанию оно составляет около 30 МБ (30,000,000 байт).
Рассмотрим, как изменить этот параметр через файл web.config, который находится в папке с опубликованной базой 1С:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
В данном примере мы установили лимит в 100 МБ. Максимально возможное значение — 4,294,967,295 байт (4 ГБ).
Если вы предпочитаете использовать графический интерфейс IIS Manager, выполните следующие действия:
Даже если IIS пропустил пакет, его может заблокировать среда ASP.NET, через которую работают расширения 1С. Здесь используется параметр maxRequestLength. В отличие от предыдущего пункта, здесь значение указывается в килобайтах.
По умолчанию лимит часто составляет всего 4096 КБ (4 МБ). Разберем, как его увеличить в разделе system.web файла web.config:
<system.web>
<httpRuntime maxRequestLength="102400" executionTimeout="300" />
</system.web>
В этом примере мы установили 100 МБ (102,400 КБ) и увеличили время ожидания (executionTimeout) до 300 секунд, так как обработка тяжелых запросов требует времени.
Ситуация усложняется, если вы используете протокол HTTPS или аутентификацию Windows. В этих случаях IIS считывает всё тело запроса в буфер, прежде чем передать его дальше. Если объем данных больше размера буфера, может возникнуть ошибка памяти.
Этот параметр настраивается через «Редактор конфигурации» (Configuration Editor) в IIS:
system.webServer/serverRuntime.uploadReadAheadSize.maxAllowedContentLength.Вернемся к сообщению (1) из обсуждения на форуме. Если ваша платформа или пул приложений работают в 32-битном режиме, они ограничены 4 ГБ адресного пространства. Для современных баз 1С с большим количеством данных это критически мало.
Проанализируем настройки пула приложений:
1C Web-Services pool).Важно помнить, что ошибка «Недостаточно свободной памяти» может генерироваться не только сервером IIS, но и самим ядром 1С. Когда w3wp.exe получает огромный XML или JSON пакет, он должен превратить его в объекты 1С. Этот процесс требует создания непрерывного блока памяти. Если память сильно фрагментирована или запрос аномально велик (например, выгрузка всей базы в одном POST-запросе), 1С выдаст ошибку, даже если лимиты IIS подняты. Для снижения нагрузки на память за счет передачи архивированных пакетов подойдет пример обработки сжатых в Zip данных HTTP-запроса.
В таких случаях мы рекомендуем:
Для удобства сведем все ключевые параметры в единый список:
Применяя эти настройки комплексно, мы исключаем «узкие места» в архитектуре взаимодействия IIS и 1С, что позволяет стабильно обрабатывать запросы любого объема. В случаях, когда на основе веб-сервисов требуется настроить регулярную синхронизацию по расписанию, применяется программа для регулярного автоматического обмена между базами 1С.