Как настроить JsReport .NET для использования текущей папки приложения - PullRequest
0 голосов
/ 15 января 2019

Есть ли способ настроить JsReport для использования текущей папки приложения для хранения временных файлов. Не используется общая папка C: \ Windows \ Temp \ jsreport? Если на общем IIS запущено несколько приложений, возникают ошибки.

Отчет об ошибке рендеринга: произошла критическая ошибка при попытке выполнить команду рендеринга: произошла ошибка при попытке запустить демонизированный процесс: произошла ошибка при попытке инициализировать jsreport (2). EBUSY: ресурс занят или заблокирован, откройте «C: \ WINDOWS \ TEMP \ jsreport \ compile \ jsreport-2.2.0-r17qQMiI7 \ chrome \ chrome.dll» (1). вызвано ошибкой (2) -> stack = Error: at instance.init.then.catch ([eval]: 43623: 29) в tryCatcher (jsreportRuntime.js: 146030: 23) в Promise._settlePromiseFromHandler (jsreportRuntime.js: 145723 : 31) в Promise._settlePromise (jsreportRuntime.js: 145780: 18) в Promise._settlePromise0 (jsreportRuntime.js: 145825: 10) в Promise._settlePromises (jsreportRuntime.js: 145900: 18) в Async.unue jreq : 41845: 16) в Async._drainQueues (jsreportRuntime.js: 41855: 10) в Immediate.Async.drainQueues (jsreportRuntime.js: 41729: 14) в runCallback (timers.js: 794: 20) в tryOnImmediate (timers.js) : 752: 5) at processImmediate [как _immediateCallback] (timers.js: 729: 5), вызванный ошибкой (1) -> meta = {"errno": - 4082, "code": "EBUSY", "syscall": "open", "path": "C: \ WINDOWS \ TEMP \ jsreport \ compile \ jsreport-2.2.0-r17qQMiI7 \ chrome \ chrome.dll"}, стек = ошибка: (1). вызвано ошибкой (1) -> stack = Error: at exports.NsSocket.socket.dataOnce ([eval]: 44008: 13) в exports.NsSocket.listener ([eval]: 16744: 10) в exports.NsSocket.EventEmitter .emit ([eval]: 16832: 22) в export.NsSocket._onData ([eval]: 86359: 8) в Lazy. ([eval]: 51602: 13) в Ленивых. ([eval]: 51584: 19) в emitTwo (events.js: 126: 13) в Lazy.emit (events.js: 214: 7) в Lazy. ([eval]: 51585: 22) в emitOne (events.js: 116: 13) в Lazy.emit (events.js: 211: 7) в yieldTo ([eval]: 51692: 18) в функции. ([eval]: 51730: 27) в Ленивых. ([eval]: 51698: 21) в emitOne (events.js: 116: 13) в Lazy.emit (events.js: 211: 7)

1 Ответ

0 голосов
/ 15 января 2019

Его необходимо настроить в FilterConfig в RegisterGlobalFilters, поэтому он создает папку jsreport в текущей папке приложения, чтобы jsreport.exe не мешал другим экземплярам. Ключевым свойством является TempDirectory, которое определяет местоположение для временной папки. Все файлы в этом TempDirectory создаются автоматически.

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
  filters.Add(new HandleErrorAttribute());

  var tempPath = Path.Combine(HttpRuntime.AppDomainAppPath, "jsreport");

  filters.Add(new JsReportFilterAttribute(new LocalReporting()
    .Configure(cfg =>
    {
      cfg.BaseUrlAsWorkingDirectory();
      cfg.TempDirectory = tempPath;
      return cfg;
    })
    .UseBinary(JsReportBinary.GetBinary())
    .AsUtility()
    .Create()));
}
...