Настройка сервиса для массового скачивания документов единым архивом

Начиная с версии системы 3.23 появилась возможность скачивания сразу нескольких документов из Объектов единым архивом.

1. Для запуска сервиса архивации на сервере необходимо:

  • установить .Net 6.0;
  • для учетной записи, из-под которой запускается сервис архивации, необходимо настроить соответствующие права на папку, в которой будут писаться/удаляться файлы.

2. Необходимо установить архиватор 7-Zip для корректной распаковки скачанных архивов с документами. Чтобы скачанные архивы по умолчанию открывались через данную программу, необходимо убедиться, что файлы с расширением .zip ассоциированы с данным архиватором.

  1. Распаковать дистрибутив системы ADVANTA на отдельном сервере
  2. Перейти внутри каталога с распакованным дистрибутивом в папку DocumentsArchivingService.
  3. В подпапке Config настроить конфигурационный файл client.config сервиса архивации (см. ниже) и, при желании, выполнить настройки ведения логов в файле log4net.config.
  4. Из командной строки установить SL.DocumentsArchiving.Service.exe (содержится в папке DocumentsArchivingService) по команде install, после чего запустить его по команде run.


Настройка конфигурации внешнего сервиса

Файл конфигурации client.config должен быть скопирован в папку публикации сервиса. После редактирования файла конфигурации необходимо перезапустить сервис.

Пример настройки файла конфигурации внешнего сервиса архивации

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
 
  <connectionStrings>
    <add name="db" providerName="System.Data.SqlClient" connectionString="Server={server};Database={database};User Id={user};Password={password}; Max Pool Size = 4000"/>
    <add name="busDb" providerName="System.Data.SqlClient" connectionString="Server={server};Database={database};User Id={user};Password={password}; Max Pool Size = 4000"/>
  </connectionStrings>
 
  <appSettings>
    <add key="BusTransportType" value="SqlServer"/>
    <add key="Bus_DocumentsArchivingCommandsQueue:NumberOfWorkers" value="1"/>
    <add key="Bus_DocumentsArchivingCommandsQueue:MaxParallelism" value="3"/>
    <add key="ProfilerLogEnable" value="true"/>
    <add key="IsWriteToProfilerLogAllRequests" value="true"/>
    <add key="ProfilerAllLogsSizeLimitMegaBytes" value="10"/>
    <add key="CompressionLevel" value="Optimal"/>
    <add key="TemporaryArchiveFlat" value="FileSystem"/>
    <add key="PathToTemporaryArchiveFlat" value="C:\Temp"/>
  </appSettings>
 
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <container>
      <register type="Advanta.Files.IFileStorageProvider, Advanta.Infrastructure" 
			    mapTo="SL.Storage.SqlFileStorageProvider, SL.DocumentsArchiving.Service">
        <constructor>
          <param name="connectionStringName" value="db" type="string"></param>
        </constructor>
      </register>
    <!--
      <register type="Advanta.Files.IFileStorageProvider, Advanta.Infrastructure" 
			    mapTo="SL.Storage.LocalFileStorageProvider, SL.DocumentsArchiving.Service">
        <constructor>
          <param name="documentsFolder" type="string" value="C:\LocalFileStorage" />
        </constructor>
      </register>
      -->
    </container>
  </unity>
</configuration>

Обязательные настройки отмечены -звездочкой (*)

  1. <configSections> (*) - не изменяется
  2. <connectionStrings> (*) - настройка параметров подключения сервиса к базе данных системы ADVANTA
    • <add name=«db» providerName=«System.Data.SqlClient» connectionString=«{DbConnectionString}» /> (*)
      • name - тип подключения, возможные значения: db
      • providerName - указание провайдера для подключения, возможные значения: System.Data.SqlClient
      • connectionString - заменить значение {DbConnectionString} на корректную строку подключения к базе данных
    • <add name=«busDb» providerName=«System.Data.SqlClient» connectionString=«{DbConnectionString}» />
      • name - тип подключения, возможные значения: busDb - имя строки подключения для шины данных
      • providerName - указание провайдера для подключения, возможные значения: System.Data.SqlClient
      • connectiongString - заменить значение {DbConnectionString} на корректную строку подключения к базе данных
  3. <appSettings> (*) - основные настройки приложения типа ключ-значение <add key=«{Key}» value=«{Value}» /> - один параметр определяет одну настройку. Описание значений ключей:
    • BusTransportType - тип транспорта для шины данных, возможные значения (если в конфиге нет параметра, используется значение SqlServer):
      • SqlServer - шина данных работает через SQL Server (требует указания в разделе <connectionStrings> выше строки подключения с именем busDb)
      • InMemory - шина данных работает через память
    • Bus_DocumentsArchivingCommandsQueue:NumberOfWorkers - количество обработчиков событий сервиса архивации документов, значение по умолчанию 1
    • Bus_DocumentsArchivingCommandsQueue:MaxParallelism - максимальный параллелизм обработчиков событий сервиса архивации документов, значение по умолчанию 3
    • ProfilerLogEnable (*) - запущена ли запись событий сервиса архивации документов профайлером (true или false)
    • IsWriteToProfilerLogAllRequests (*) - следует ли записывать все события сервиса архивации документов профайлером (true или false)
    • ProfilerAllLogsSizeLimitMegaBytes (*) - суммарный лимит (в МБ) журналов профайлера
    • CompressionLevel - степень сжатия архивов сервисом архивации документов (значение по умолчанию Optimal):
      • Optimal - максимальное сжатие
      • Fastest - максимальная скорость архивации
      • NoCompression - без сжатия
    • TemporaryArchiveFlat - место временного размещения скачанных архивируемых файлов - только для DocumentsArchivingService=Local (значение по умолчанию Memory):
      • Memory - оперативная память
      • FileSystem - файловая система
    • PathToTemporaryArchiveFlat - путь к папке для временного размещения скачанных архивируемых файлов - работает и обязателен только для варианта TemporaryArchiveFlat = FileSystem
  4. <unity> - настройки DI-контейнера. Надо выбрать только 1 из вариантов, а второй закомментировать (как в примере выше):
    • <register>…первый блок …</register> - при разрешении зависимости в SL.Storage.SqlFileStorageProvider (файлы хранятся в БД)
    • <register>…второй блок …</register> - при разрешении зависимости в SL.Storage.LocalFileStorageProvider (файлы хранятся на диске, значение value параметра documentsFolder должно содержать имя папки с файлами)



Настройка логирования работы внешнего сервиса архивации

Файл конфигурации ведения логов приложения log4net.config должен быть скопирован в папку публикации сервиса. Если данный файл отсутствует, то в этом случае логи работы сервиса вестись не будут. После редактирования файла конфигурации логов необходимо перезапустить сервис.

Пример содержания файла log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <root>
      <level value="ALL"/>
      <appender-ref ref="appender"/>
    </root>
    <appender name="appender" type="log4net.Appender.RollingFileAppender">
      <file value="archsvc.log"/>
      <appendToFile value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="3"/>
      <maximumFileSize value="3MB"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
	    <conversionPattern value="%d %-5p %m%n"/>
      </layout>
    </appender>
</log4net>

Подробнее о значениях параметров файла настройки см. в официальной документации Log4net - https://logging.apache.org/log4net/manual/configuration/appenders/rollingfileappender.html



Для использования локального сервиса архивации (встроенного в Cистему), устанавливать отдельно его не нужно, но необходимо настраивать параметры сервиса в конфигурационном файле client.config самой Системы (см. ниже).

Рекомендуется разворачивать сервис архивации файлов только удаленно, т.е. на отдельном сервере, отличном от сервера, где установлена Система ADVANTA.



Для настройки сервиса для массового скачивания документов единым архивом необходимо:

1. Обязательно предусмотреть возможность выноса сервиса архивации файлов на отдельный сервер.

2. Скорректировать раздел appSettings в конфигурационном файле client.config сервера приложения ADVANTA, добавив параметры для настройки взаимодействия с Сервисом массового скачивания документов:

При использовании сервиса архивации на отдельном сервере

<appSettings>
 
    <!-- текущие настройки Системы -->
 
    <!-- Пример настройки Системы для архивации файлов на отдельном сервере -->
 
    <add key="DocumentsArchivingService" value="Remote" />
 
    <add key="DocumentsArchiveLifeTimeHours" value="168" />	
    <add key="MaxTotalFileSize" value="2097152000" />
    <add key="MaxFileCount" value="500" />
    <add key="MaxDocumentsArchivingActionCount" value="3" />
    <add key="MaxFullPathLength" value="150" />
    <add key="MinFolderNameLength" value="3" />
    <add key="MinRootFolderNameLength" value="30" />  
 
</appSettings>

При использовании локального сервиса архивации необходимо настроить дополнительные параметры, кроме указанных выше

<appSettings>
 
    <!-- текущие настройки Системы -->
 
    <!-- Пример настройки Системы для архивации файлов на одном сервере с приложением ADVANTA -->
 
    <add key="DocumentsArchivingService" value="Local" />
 
    <!-- Параметры, по аналогии с примером выше для использования удаленного сервиса архивации -->
 
    <!-- Дополнительные параметры при выборе локального сервиса архивации файлов -->
 
    <add key="Bus_DocumentsArchivingCommandsQueue:NumberOfWorkers" value="1"/>
    <add key="Bus_DocumentsArchivingCommandsQueue:MaxParallelism" value="3"/>
    <add key="ProfilerLogEnable" value="true"/>
    <add key="IsWriteToProfilerLogAllRequests" value="true"/>
    <add key="ProfilerAllLogsSizeLimitMegaBytes" value="10"/>
    <add key="CompressionLevel" value="Optimal"/>
    <add key="TemporaryArchiveFlat" value="Memory"/>
    <add key="PathToTemporaryArchiveFlat" value="C:\Temp"/>  
 
</appSettings>

Где:

  • DocumentsArchivingService - ключ активации функционала, указывающий на расположение сервиса архивации документов:
    • Remote - используется удалённый сервис архивации документов
    • Local - используется встроенный в Систему сервис архивации документов
    • Если этот ключ отсутствует в конфиге, то сервис архивации документов недоступен, в интерфейсе просмотра документов по проектам не будет чекбоксов для выбора файлов для массового скачивания.
  • DocumentsArchiveLifeTimeHours - время жизни архивов документов (в часах), значение по умолчанию 168
  • MaxTotalFileSize - максимальный суммарный размер файлов (в байтах) для архивирования документов. Если в конфиге нет параметра, используется значение 2097152000
  • MaxFileCount - максимальное количество файлов для архивирования документов. Если в конфиге нет параметра, используется значение 500
  • MaxDocumentsArchivingActionCount - максимальное количество одновременно выполняемых задач архивирования документов. Если в конфиге нет параметра, используется значение 3
  • MaxFullPathLength - максимальная длина полного пути в архиве (символов), значение по умолчанию 200
  • MinFolderNameLength - минимальная допустимая при сокращении длина названия папок архива (кроме корневой), значение по умолчанию 6
  • MinRootFolderNameLength - минимальная допустимая при сокращении длина названия корневой папки, значение по умолчанию 30

Параметры, доступные в файле client.config основного приложения ADVANTA только для варианта, когда DocumentsArchivingService = Local:

  • Bus_DocumentsArchivingCommandsQueue:NumberOfWorkers - количество обработчиков событий сервиса архивации документов, значение по умолчанию 1
  • Bus_DocumentsArchivingCommandsQueue:MaxParallelism - максимальный параллелизм обработчиков событий сервиса архивации документов, значение по умолчанию 3
  • ProfilerLogEnable - запущена ли запись событий сервиса архивации документов профайлером (true или false)
  • IsWriteToProfilerLogAllRequests - следует ли записывать все события сервиса архивации документов профайлером (true или false)
  • ProfilerAllLogsSizeLimitMegaBytes - суммарный лимит (в МБ) журналов профайлера
  • CompressionLevel - степень сжатия архивов сервисом архивации документов (значение по умолчанию Optimal):
    • Optimal - максимальное сжатие
    • Fastest - максимальная скорость архивации
    • NoCompression - без сжатия
  • TemporaryArchiveFlat - место временного размещения скачанных архивируемых файлов - только для DocumentsArchivingService=Local (значение по умолчанию Memory):
    • Memory - оперативная память
    • FileSystem - файловая система
  • PathToTemporaryArchiveFlat - путь к папке для временного размещения скачанных архивируемых файлов - только для варианта TemporaryArchiveFlat = FileSystem




Если какой-то из вышеперечисленных параметров (кроме ключа активации функционала DocumentsArchivingService) не указан в файле client.config, то используется его значение по умолчанию.

Если ключ активации функционала не указан, то возможности массового скачивания нет, даже если право «Скачивание нескольких документов» явно разрешено.

Подробнее об отслеживании хода процесса скачивания документов единым архивом на странице «Фоновые процессы».