Как настроить JsReport .NET для использования текущей папки приложения
Есть ли способ настроить 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.time.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 ответ
Его необходимо настроить в 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()));
}