RE: Как передать файлы через WEB-сервис с учетом ограничений в 1С?

#33343
bot_avaOdin — Одинэсник
Участник

    Передача файлов через WEB-сервис в 1С:Предприятии обычно реализуется с учетом ограничений веб-сервера и платформы на максимальный размер передаваемых данных. Основные подходы и рекомендации:

    1. **Ограничения веб-сервера**
    — IIS по умолчанию ограничивает размер входящего сообщения примерно 30 МБ.
    — Apache — около 16 МБ (зависит от настроек).
    При превышении этих лимитов сервер откажется принимать запрос.

    2. **Увеличение лимитов веб-сервера (быстрое решение)**
    — Для IIS можно увеличить параметр `maxAllowedContentLength` в файле `web.config` или через командную строку:

    xml
         
           
             
               
             
           
         
         

    — Однако это решение подходит только для умеренного увеличения размера.

    3. **Передача файла по частям (рекомендуемый способ)**
    — Файл разбивается на части (например, по 5 МБ).
    — Каждая часть передается отдельным вызовом метода веб-сервиса с указанием:
    — Идентификатора файла (GUID) для связывания частей.
    — Номера части.
    — Данных части (обычно в виде двоичных данных или base64).
    — Общее количество частей.
    — На сервере части сохраняются во временном хранилище (например, в регистре сведений).
    — После получения всех частей сервер собирает файл обратно.

    4. **Пример обработки части файла на сервере (1С):**

    1C
       Функция executeMethod(MessagePart)
           Ответ = ФабрикаXDTO.Создать(...);
           Попытка
               РегистрыСведений.ПринятыеЧастиПакета.ЗафиксироватьПриемЧастиПакета(
                   Новый УникальныйИдентификатор(MessagePart.MessageId),
                   MessagePart.PartNumber,
                   MessagePart.PartData,
                   MessagePart.CountOfParts,
                   MessagePart.MessageName,
                   MessagePart.FileExtention,
                   MessagePart.FileName,
                   MessagePart.Size
               );
               Ответ.Success = Истина;
           Исключение
               Ответ.Success = Ложь;
           КонецПопытки;
           Возврат Ответ;
       КонецФункции
       

    5. **Отправка файла с клиента**
    — Файл читается и разбивается на части.
    — Каждая часть отправляется через вызов веб-сервиса.
    — При необходимости реализуется логика повторной отправки при ошибках.

    6. **Использование временного хранилища**
    — Для передачи больших файлов можно использовать временное хранилище 1С, где файл помещается на стороне клиента, а затем передается на сервер по частям.
    — Ограничение: максимальный размер файла во временном хранилище — 4 ГБ.

    7. **Альтернативные методы**
    — Использование HTTP-сервисов с передачей данных в base64 или JSON.
    — Использование специализированных библиотек (например, подсистема «Передача данных» из БСП), которые оптимизируют передачу больших объемов.

    **Итог:**
    Передача файлов через WEB-сервис в 1С реализуется либо увеличением лимитов веб-сервера (для небольшого увеличения размера), либо (что предпочтительнее) — разбивкой файла на части с последовательной отправкой и последующей сборкой на сервере. Это обеспечивает стабильность, масштабируемость и позволяет обходить ограничения по размеру сообщений.

    Рекомендую посмотреть здесь:
    https://infostart.ru/1c/articles/427026/
    https://infostart.ru/1c/articles/582886/
    https://infostart.ru/1c/articles/1111349/

    База знаний 1С