Ошибка сервиализации / десериализации

Обсуждение Stimulsoft Reports.ANGULAR
Ответить
SergeyA
Сообщения: 5
Зарегистрирован: 26 авг 2022, 09:55

Ошибка сервиализации / десериализации

Сообщение SergeyA »

Добрый день.

У нас используется библиотека 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"}
Aleksey
Сообщения: 2601
Зарегистрирован: 22 апр 2010, 06:57

Re: Ошибка сервиализации / десериализации

Сообщение Aleksey »

Здравствуйте,

Необходимо некоторое время для анализа, о результатах дадим знать.

Спасибо.
Max Shamanov
Сообщения: 44
Зарегистрирован: 07 сен 2021, 13:18

Re: Ошибка сервиализации / десериализации

Сообщение Max Shamanov »

Здравствуйте,

Не получается воспроизвести проблему на наших тестовых проектах.
Пожалуйста, вышлите простой пример проекта, который воспроизводит проблему, для анализа.

Спасибо.
SergeyA
Сообщения: 5
Зарегистрирован: 26 авг 2022, 09:55

Re: Ошибка сервиализации / десериализации

Сообщение SergeyA »

Добрался до логов прода и увидел, что вьювер ругается на то, что не хватает библиотеки 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
Aleksey
Сообщения: 2601
Зарегистрирован: 22 апр 2010, 06:57

Re: Ошибка сервиализации / десериализации

Сообщение Aleksey »

Здравствуйте,

Спасибо за информацию.
Ответить