Механизм выноса сервиса расчета Excel-отчетов на отдельную машину (для ОС Windows)

Инструкция по выносу сервиса расчета Excel-отчетов на отдельную машину для ОС Windows.

Инструкция для ОС Linux находится на отдельной странице.

Опубликовать проект SL.Spreadsheet.WcfService, используя Release.

После этого в папке Publish\SpreadsheetService (полный путь ~\SL.Spreadsheet.WcfService\Publish) опубликуется сервис пересчета.

Активация WAS для взаимодействия с сервисом с помощью протоколов отличных от http (net.tcp, net.pipe и др.):

1. Установить компоненты Windows (Программы и компоненты):

  • .Net Framework 3.5 → Активация WCF не по HTTP;
  • Дополнительные службы .Net Framework 4.5 → Службы WCF → Активация по HTTP, Активация по TCP, Активация по именованным каналам.

2. Добавить привязки net.tcp, net.pipe в веб-сайт IIS, где будет размещаться сервис.

  1. Скопировать папку с сервисом «SpreadsheetService» (например, в inetpub\wwwroot).
  2. Создать отдельный пул в IIS для сервиса, обязательно в Integrated Mode («встроенный» в русской версии Windows).
  3. Создать приложение в IIS, где задать имя и путь к сервису из пункта 1, выбрать пул из пункта 2.
  4. В дополнительных параметрах приложения указать активные протоколы: http, net.tcp, net.pipe.

Запустить сервис пересчета, запустив файл SL.Spreadsheet.WcfService.exe из папки Publish\SpreadsheetService.

Настройка приложения ADVANTA на работу с удаленным сервисом пересчета Excel-отчетов:

1. В client.config в appSettings добавить:

<add key="WorkbookHandler" value="Remote" />

По умолчанию:

  • значение Local - встроенный режим;
  • значение Remote - удаленный режим.

2. В serviceModelClient.config раскомментировать endpoint с протоколом, который требуется использовать:

  • если приложение и сервис расположены на одном сервере, то рекомендуется использовать netNamedPipeBinding;
  • если на разных серверах, то netTcpBinding.

Исправить значение address на адрес к развернутому сервису - путь должен выглядеть так: net.pipe:⁄⁄{адрес к сервису}/WorkbookHandlerService.svc.

Для включения Serilog в сервисе пересчета в Web.config сервиса в секцию appSettings необходимо добавить:

<add key="ProfilerLogEnable" value="true"/>
      <add key="ProfilerLogPath" value="C:\inetpub\wwwroot\SpreadsheetService\logs"/>
      <add key="ProfilerAllLogsSizeLimitMegaBytes" value="500"/>
В папке с логами C:\inetpub\wwwroot\SpreadsheetService\logs должна быть подпапка ProfilerLog, иначе ничего записываться не будет.

Также поддерживаются другие ключи: ProfilerLogPath, ProfilerAllLogsSizeLimitMegaBytes, IsWriteToProfilerLogAllRequests, ProfilerLogExclusions.

Можно добавить секцию log4net в Web.config сервиса:

<configSections>
                     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
             </configSections>

Можно добавить секцию log4net в configuration:

 <log4net>
                    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
                            <file value="C:\inetpub\wwwroot\SpreadsheetService\logs\log4net\log.txt"/>
                            <appendToFile value="true"/>
                            <rollingStyle value="Size"/>
                            <maxSizeRollBackups value="10"/>
                            <maximumFileSize value="50MB"/>
                            <staticLogFileName value="true"/>
                            <layout type="log4net.Layout.PatternLayout">
                                  <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
                           </layout>
                   </appender>
                   <root>
                          <level value="ALL"/>
                          <appender-ref ref="RollingFileAppender"/>
                   </root>
            </log4net>

Также можно настроить трассировку в wcf. Пример настройки:

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Log.svclog" />
    </sharedListeners>
</system.diagnostics>

Пример Web.config с настроенным логированием: