База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как передавать большие пакеты через веб-сервис в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 3 дня, 5 часов назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
12 мая 2026 в 9:00 #37074
передача больших пакетов через веб-сервис
-
12 мая 2026 в 9:00 #37075
Передача больших пакетов через веб-сервис в 1С:Предприятии — задача нетривиальная из-за ограничений веб-сервера и платформы. Вот как это обычно решается:
1. **Ограничения веб-сервера**
По умолчанию IIS ограничивает максимальный размер входящего сообщения примерно 30 МБ, Apache — около 16 МБ. Если пакет больше — сервер просто не примет запрос. Можно увеличить лимит, изменив настройки веб-сервера, например, в IIS через web.config:1С (Код)1234567<system.webServer>| <security>| <requestfiltering>| <requestlimits maxAllowedContentLength="1048576000"></requestlimits>| </requestfiltering>| </security></system.webServer>Но это решение подходит только для умеренного увеличения размера, большие пакеты (сотни мегабайт и более) так не передать — это сильно нагрузит сервер и может привести к сбоям.
2. **Передача файла по частям (пакетам)**
Правильный и рекомендуемый способ — разбивать большой пакет на части и передавать их по отдельности. В 1С это реализуется через веб-сервис, который принимает части с уникальным идентификатором (GUID) и порядковым номером. На стороне сервера части сохраняются в регистр сведений, а после получения всех частей происходит «склейка» в исходный файл.Пример обработчика метода веб-сервиса:
1С (Код)12345678910111213141516171819Функция executeMethod(MessagePart)Ответ = ФабрикаXDTO.Создать(ФабрикаXDTO.Пакеты.Получить("http://www.develplatform.ru").Получить("MessagePartResponse"));ПопыткаРегистрыСведений.ПринятыеЧастиПакета.ЗафиксироватьПриемЧастиПакета(Новый УникальныйИдентификатор(MessagePart.MessageId),MessagePart.PartNumber,MessagePart.PartData,MessagePart.CountOfParts,MessagePart.MessageName,MessagePart.FileExtension,MessagePart.FileName,MessagePart.Size);Ответ.Success = Истина;ИсключениеОтвет.Success = Ложь;КонецПопытки;Возврат Ответ;КонецФункцииТакой подход позволяет передавать файлы размером в сотни мегабайт и более, не перегружая веб-сервер.
3. **Использование встроенной библиотеки «ПередачаДанных»**
В платформе 1С есть служебная библиотека «ПередачаДанных», которая реализует передачу больших файлов через HTTP-сервисы с поддержкой докачки, многопоточной загрузки и высокой скорости. Она разбивает файл на части, передает их, а на сервере собирает обратно. Это более современный и производительный способ, особенно для объемов до десятков гигабайт.
Подробнее о ней: https://infostart.ru/1c/articles/1111349/4. **Временное хранилище и ограничения**
При использовании временного хранилища для передачи больших данных есть ограничение — нельзя передать более 4 Гб за один вызов, и при этом создается несколько временных файлов, что требует большого дискового пространства и снижает скорость. Поэтому для очень больших данных лучше использовать передачу по частям или специализированные механизмы.5. **Практические рекомендации**
— Не пытайтесь передавать большие файлы целиком через веб-сервис — это неустойчиво и неэффективно.
— Используйте разбиение на части с уникальным идентификатором и порядковым номером.
— Настраивайте веб-сервер на прием больших сообщений, но не слишком большие, чтобы не перегружать сервер.
— Рассмотрите использование библиотеки «ПередачаДанных» для оптимальной передачи больших объемов.
— При необходимости реализуйте контроль целостности и подтверждение получения каждой части.
https://infostart.ru/1c/articles/1111349/ — описание библиотеки «ПередачаДанных» для передачи больших файлов
https://infostart.ru/1c/articles/582886/ — пример передачи больших данных через веб-сервисы с разбиением на частиТаким образом, передача больших пакетов через веб-сервис в 1С — это либо увеличение лимитов веб-сервера для небольшого роста, либо (лучше) реализация передачи по частям с последующей сборкой на сервере.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.