Механизм выноса сервиса расчета Excel-отчетов на отдельную машину (для ОС Windows)
Инструкция по выносу сервиса расчета Excel-отчетов на отдельную машину для ОС Windows.
Инструкция для ОС Linux находится на отдельной странице.
Как установить сервис и запускать его в автоматическом режиме
Сборка сервиса пересчета Excel-отчетов
Опубликовать проект SL.Spreadsheet.WcfService, используя Release.
После этого в папке Publish\SpreadsheetService (полный путь ~\SL.Spreadsheet.WcfService\Publish) опубликуется сервис пересчета.
Активация WAS для взаимодействия с сервисом
Активация WAS для взаимодействия с сервисом с помощью протоколов отличных от http (net.tcp, net.pipe и др.):
- Установить компоненты Windows (Программы и компоненты):
.Net Framework 3.5→ Активация WCF не поHTTP;- Дополнительные службы
.Net Framework 4.5→ Службы WCF → Активация поHTTP, Активация поTCP, Активация по именованным каналам.
- Добавить привязки
net.tcp,net.pipeв веб-сайтIIS, где будет размещаться сервис.
Размещение сервиса пересчета Excel-отчетов
- Скопировать папку с сервисом «SpreadsheetService» (например, в
inetpub\wwwroot). - Создать отдельный пул в IIS для сервиса, обязательно в Integrated Mode («встроенный» в русской версии Windows).
- Создать приложение в IIS, где задать имя и путь к сервису из пункта 1, выбрать пул из пункта 2.
- В дополнительных параметрах приложения указать активные протоколы:
http,net.tcp,net.pipe.
Запуск сервиса пересчета
Запустить сервис пересчета, запустив файл SL.Spreadsheet.WcfService.exe из папки Publish\SpreadsheetService.
Настройка приложения ADVANTA
Настройка приложения ADVANTA на работу с удаленным сервисом пересчета Excel-отчетов:
1. В client.config в appSettings добавить:
<add key="WorkbookHandler" value="Remote" />
По умолчанию:
- значение Local - встроенный режим;
- значение Remote - удаленный режим.
2. В serviceModelClient.config раскомментировать endpoint с протоколом, который требуется использовать:
- если приложение и сервис расположены на одном сервере, то рекомендуется использовать
netNamedPipeBinding; - если на разных серверах, то
netTcpBinding.
Исправить значение address на адрес к развернутому сервису - путь должен выглядеть так: net.pipe:⁄⁄{адрес к сервису}/WorkbookHandlerService.svc.
Логирование в сервисе пересчета Excel-отчетов
Для включения 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>
