Добрый день.
У нас используется библиотека stimulsoft.reports.angular.netcore\2021.3.7
При разработке на тестовой среде все успешно работает, но когда код запускаем на проде, то получаем ошибки в тех местах, где происходит сериализация/десериализация в строку/из строки объекта отчета.
В чем может быть дело?
При создании отчета падает на методе:
Report.LoadFromString(reportTemplate);
При загрузке во вьювер на методе:
report.Report = stiReport.SaveDocumentToString();
Вот так выглядит ошибка при создании:
{"Message":"Exception has been thrown by the target of an invocation.","StackTrace":" at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean wrapExceptions, Boolean\u0026 canBeCached, RuntimeMethodHandleInternal\u0026 ctor, Boolean\u0026 hasNoDefaultCtor)\n at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache)\n at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)\n at Stimulsoft.Base.Serializing.StiSerializing.GetObjectFromType(String typeStr)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.Deserialize(Object obj, Stream stream, String application)\n at Stimulsoft.Report.SaveLoad.StiXmlReportSLService.Load(StiReport report, Stream stream)\n at Stimulsoft.Report.StiReport.Load(StiReportSLService service, Stream stream)\n at Stimulsoft.Report.StiReport.Load(Stream stream)\n at Stimulsoft.Report.StiReport.LoadFromString(String reportStr)\n at Mediator.Reports.Builders.ReportBuilder.Init() in /src/src/Mediator.Reports/Builders/ReportBuilder.cs:line 38\n at Mediator.Reports.Services.ReportService.BuildReport(ReportWriteEntity report) in /src/src/Mediator.Reports/Services/ReportService.cs:line 283\n at Mediator.Reports.Services.ReportService.CreateStiReport(ReportWriteEntity report) in /src/src/Mediator.Reports/Services/ReportService.cs:line 264\n at Mediator.Reports.Services.ReportService.CreateReportAsync(Int64 reportTemplateId, AdvancedDateOptions advancedDateOptions, String displayedName, String user) in /src/src/Mediator.Reports/Services/ReportService.cs:line 138\n at Mediator.Reports.Controllers.ReportsController.Create(CreateReportRequest req) in /src/src/Mediator.Reports/Controllers/ReportsController.cs:line 61\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeActionMethodAsync\u003Eg__Awaited|12_0(ControllerActionInvoker invoker, ValueTask\u00601 actionResultValueTask)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeNextActionFilterAsync\u003Eg__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State\u0026 next, Scope\u0026 scope, Object\u0026 state, Boolean\u0026 isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeInnerFilterAsync\u003Eg__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeFilterPipelineAsync\u003Eg__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeAsync\u003Eg__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)\n at Microsoft.AspNetCore.Routing.EndpointMiddleware.\u003CInvoke\u003Eg__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)\n at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)\n at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Builder.Extensions.MapWhenMiddleware.Invoke(HttpContext context)\n at Core.Shared.Middleware.Exceptions.ExceptionMiddleware.InvokeAsync(HttpContext httpContext) in /src/src/Core.Shared/Middleware/Exceptions/ExceptionMiddleware.cs:line 30"}
вот так при загрузке во вьювер:
{"Message":"Exception has been thrown by the target of an invocation.","StackTrace":" at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean wrapExceptions, Boolean\u0026 canBeCached, RuntimeMethodHandleInternal\u0026 ctor, Boolean\u0026 hasNoDefaultCtor)\n at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache)\n at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)\n at Stimulsoft.Base.Serializing.StiSerializing.GetObjectFromType(String typeStr)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(XmlTextReader tr, String parentPropName)\n at Stimulsoft.Base.Serializing.StiSerializing.Deserialize(Object obj, Stream stream, String application)\n at Stimulsoft.Report.SaveLoad.StiXmlDocumentSLService.Load(StiReport report, Stream stream)\n at Stimulsoft.Report.StiReport.LoadDocument(StiDocumentSLService service, Stream stream)\n at Stimulsoft.Report.StiReport.LoadDocument(Stream stream)\n at Stimulsoft.Report.StiReport.LoadDocumentFromString(String reportStr)\n at Mediator.Reports.Services.ReportService.LoadReportAsync(ReportEntity report) in /src/src/Mediator.Reports/Services/ReportService.cs:line 194\n at Mediator.Reports.Controllers.ViewerController.ViewerEvent() in /src/src/Mediator.Reports/Controllers/ViewerController.cs:line 151\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeActionMethodAsync\u003Eg__Awaited|12_0(ControllerActionInvoker invoker, ValueTask\u00601 actionResultValueTask)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeNextActionFilterAsync\u003Eg__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State\u0026 next, Scope\u0026 scope, Object\u0026 state, Boolean\u0026 isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeInnerFilterAsync\u003Eg__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeFilterPipelineAsync\u003Eg__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeAsync\u003Eg__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)\n at Microsoft.AspNetCore.Routing.EndpointMiddleware.\u003CInvoke\u003Eg__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)\n at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)\n at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Builder.Extensions.MapWhenMiddleware.Invoke(HttpContext context)\n at Core.Shared.Middleware.Exceptions.ExceptionMiddleware.InvokeAsync(HttpContext httpContext) in /src/src/Core.Shared/Middleware/Exceptions/ExceptionMiddleware.cs:line 30"}
Ошибка сервиализации / десериализации
Re: Ошибка сервиализации / десериализации
Здравствуйте,
Необходимо некоторое время для анализа, о результатах дадим знать.
Спасибо.
Необходимо некоторое время для анализа, о результатах дадим знать.
Спасибо.
-
- Сообщения: 87
- Зарегистрирован: 07 сен 2021, 13:18
Re: Ошибка сервиализации / десериализации
Здравствуйте,
Не получается воспроизвести проблему на наших тестовых проектах.
Пожалуйста, вышлите простой пример проекта, который воспроизводит проблему, для анализа.
Спасибо.
Не получается воспроизвести проблему на наших тестовых проектах.
Пожалуйста, вышлите простой пример проекта, который воспроизводит проблему, для анализа.
Спасибо.
Re: Ошибка сервиализации / десериализации
Добрался до логов прода и увидел, что вьювер ругается на то, что не хватает библиотеки libgdiplus в базовом образе.
Добавили в докер файл соответствующую библиотеку и все заработало!
Если кому-то вдруг потребуется, начало докер файла у нас теперь выглядит примерно так:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN apt-get update && apt-get install -y libgdiplus
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
Добавили в докер файл соответствующую библиотеку и все заработало!
Если кому-то вдруг потребуется, начало докер файла у нас теперь выглядит примерно так:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN apt-get update && apt-get install -y libgdiplus
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
Re: Ошибка сервиализации / десериализации
Здравствуйте,
Спасибо за информацию.
Спасибо за информацию.