Open Closed

Redis performance issues in LanguageManagement (DynamicLocalizationResourceContributor) #2880


User avatar
0
cezary.bojko created
  • ABP Framework version: v5.1.4
  • UI type: Angular
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): yes
  • Exception message and stack trace:
  • Steps to reproduce the issue:"

We have some issues with Redis timeouts. During our investigation we found that this is something related to the LanguageManagement module and a DynamicLocalizationResourceContributor.

If we use our api method that returns PagedResultDto<T> multiple calls to Redis are executed (approximately 120 calls per our one api call!): [16:07:33 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpExceptionHandling_pl-PL [16:07:33 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpExceptionHandling_pl [16:07:33 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpExceptionHandling_en [16:07:33 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:OrderManagementSystem_pl-PL [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:OrderManagementSystem_pl [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:OrderManagementSystem_pl-PL [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpValidation_pl-PL [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpValidation_pl [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpValidation_en [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpUi_pl-PL [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpUi_pl [16:07:34 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpUi_en ....

Removing DynamicLocalizationResourceContributor helped. We found this tip in other topic in abp support forum (https://support.abp.io/QA/Questions/2625/Help-needed-what%27s-LanguageManagement-doing-here). But there is also a warning that LanguageManagement won't work anymore. Configure<AbpLocalizationOptions>(options => { options.GlobalContributors.Remove<DynamicLocalizationResourceContributor>(); });

What is DynamicLocalizationResourceContributor responsible for? Can we simply remove this? I didn't notice any problems in application after remove this contributor. Why LanguageManagement make so many call to redis for endpoints with PagedResultDto<T> return type?


9 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    I will check this again.

  • User Avatar
    0
    cezary.bojko created

    Hey, Any news on this issue?

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi I am still working on it. I will leave a message if I'm done.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    Still working on it.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    Current statue:

    Double the query if the localized text does not exist in pl-PL.

    See

    [16:07:33 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpExceptionHandling_pl-PL
    [16:07:33 WRN] Redis get c:Volo.Abp.LanguageManagement.Texts,k:AbpExceptionHandling_pl
    

    https://github.com/abpframework/abp/blob/e3e1779de6df5d26f01cdc8e99ac9cbcb3d24d3c/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs#L99

    I suggest adding the corresponding translated text via LanguageManagement.

    We will add an option to disable this behavior in 5.3. https://github.com/abpframework/abp/issues/12361

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    If we use our api method that returns PagedResultDto<T> multiple calls to Redis are executed (approximately 120 calls per our one api call!):

    Can you share your API method code and full logs?

  • User Avatar
    0
    cezary.bojko created

    Sample stacktrace (1 redis call) TracedRedisCache.Get()at C:\dev\Neuca\src\aspnet-core\src\Neuca.OrderManagementSystem.HttpApi.Host\OmsExtensions\TracedRedisCache.cs:line 27 DistributedCache<LanguageTextCacheItem, string>.Get() DistributedCache<LanguageTextCacheItem, string>.GetOrAdd() DynamicResourceLocalizer.GetCacheItem() DynamicResourceLocalizer.GetOrNull() DynamicLocalizationResourceContributor.GetOrNull() LocalizationResourceContributorList.GetOrNull() AbpDictionaryBasedStringLocalizer.GetLocalizedStringOrNull() AbpDictionaryBasedStringLocalizer.GetLocalizedString() [2] AbpDictionaryBasedStringLocalizer.GetLocalizedString() [2] AbpDictionaryBasedStringLocalizer.get_Item() [2] AbpDictionaryBasedStringLocalizer.GetLocalizedString() [1] AbpDictionaryBasedStringLocalizer.GetLocalizedString() [1] AbpDictionaryBasedStringLocalizer.get_Item() [1] AbpDataAnnotationAutoLocalizationMetadataDetailsProvider.<>c__DisplayClass4_0.<CreateDisplayMetadata>b__0() DefaultModelMetadata.get_DisplayName() ModelMetadata.GetDisplayName() DataAnnotationsModelValidator.Validate() ValidationVisitor.ValidateNode() ValidationVisitor.VisitSimpleType() ValidationVisitor.VisitImplementation() [2] ValidationVisitor.Visit() [2] ValidationVisitor.VisitChildren() ValidationVisitor.VisitComplexType() ValidationVisitor.VisitImplementation() [1] ValidationVisitor.Visit() [1] ValidationVisitor.Validate() ObjectModelValidator.Validate() ParameterBinder.EnforceBindRequiredAndValidate() ParameterBinder.<BindModelAsync>d__8.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.<BindModelAsync>d__8>() AsyncValueTaskMethodBuilder<ModelBindingResult>.Start<Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.<BindModelAsync>d__8>() ParameterBinder.BindModelAsync() ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d>() AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d>() ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<CreateBinderDelegate>g__Bind|0() ControllerActionInvoker.BindArgumentsAsync() ControllerActionInvoker.Next() ControllerActionInvoker.InvokeInnerFilterAsync() ResourceInvoker.Next() [3] ResourceInvoker.InvokeNextExceptionFilterAsync() ResourceInvoker.Next() [2] ResourceInvoker.InvokeNextResourceFilter() ResourceInvoker.Next() [1] ResourceInvoker.InvokeFilterPipelineAsync() ResourceInvoker.<<InvokeAsync>g__Logged|17_1>d.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<<InvokeAsync>g__Logged|17_1>d>() AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<<InvokeAsync>g__Logged|17_1>d>() ResourceInvoker.<InvokeAsync>g__Logged|17_1() ResourceInvoker.InvokeAsync() ControllerRequestDelegateFactory.<>c__DisplayClass10_0.<CreateRequestDelegate>b__0() EndpointMiddleware.Invoke() AbpUnitOfWorkMiddleware.<InvokeAsync>d__3.MoveNext() AsyncMethodBuilderCore.Start<Volo.Abp.AspNetCore.Uow.AbpUnitOfWorkMiddleware.<InvokeAsync>d__3>() AsyncTaskMethodBuilder.Start<Volo.Abp.AspNetCore.Uow.AbpUnitOfWorkMiddleware.<InvokeAsync>d__3>() AbpUnitOfWorkMiddleware.InvokeAsync() UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d.MoveNext() [5] AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [5] AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [5] UseMiddlewareExtensions.<>c__DisplayClass6_1.<UseMiddlewareInterface>b__1() [5] AbpExceptionHandlingMiddleware.<InvokeAsync>d__3.MoveNext() AsyncMethodBuilderCore.Start<Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingMiddleware.<InvokeAsync>d__3>() AsyncTaskMethodBuilder.Start<Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingMiddleware.<InvokeAsync>d__3>() AbpExceptionHandlingMiddleware.InvokeAsync() UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d.MoveNext() [4] AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [4] AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [4] UseMiddlewareExtensions.<>c__DisplayClass6_1.<UseMiddlewareInterface>b__1() [4] AbpAuditingMiddleware.<InvokeAsync>d__14.MoveNext() AsyncMethodBuilderCore.Start<Volo.Abp.AspNetCore.Auditing.AbpAuditingMiddleware.<InvokeAsync>d__14>() AsyncTaskMethodBuilder.Start<Volo.Abp.AspNetCore.Auditing.AbpAuditingMiddleware.<InvokeAsync>d__14>() AbpAuditingMiddleware.InvokeAsync() UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d.MoveNext() [3] AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [3] AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [3] UseMiddlewareExtensions.<>c__DisplayClass6_1.<UseMiddlewareInterface>b__1() [3] StaticFileMiddleware.Invoke() [2] SwaggerUIMiddleware.<Invoke>d__5.MoveNext() AsyncMethodBuilderCore.Start<Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.<Invoke>d__5>() AsyncTaskMethodBuilder.Start<Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.<Invoke>d__5>() SwaggerUIMiddleware.Invoke() SwaggerMiddleware.<Invoke>d__4.MoveNext() AsyncMethodBuilderCore.Start<Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.<Invoke>d__4>() AsyncTaskMethodBuilder.Start<Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.<Invoke>d__4>() SwaggerMiddleware.Invoke() [Lightweight Method Call] UseMiddlewareExtensions.<>c__DisplayClass5_1.<UseMiddleware>b__2() [5] AuthorizationMiddleware.<Invoke>d__6.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.<Invoke>d__6>() AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.<Invoke>d__6>() AuthorizationMiddleware.Invoke() IdentityServerMiddleware.<Invoke>d__3.MoveNext() AsyncMethodBuilderCore.Start<IdentityServer4.Hosting.IdentityServerMiddleware.<Invoke>d__3>() AsyncTaskMethodBuilder.Start<IdentityServer4.Hosting.IdentityServerMiddleware.<Invoke>d__3>() IdentityServerMiddleware.Invoke() [Lightweight Method Call] UseMiddlewareExtensions.<>c__DisplayClass5_1.<UseMiddleware>b__2() [4] MutualTlsEndpointMiddleware.<Invoke>d__4.MoveNext() AsyncMethodBuilderCore.Start<IdentityServer4.Hosting.MutualTlsEndpointMiddleware.<Invoke>d__4>() AsyncTaskMethodBuilder.Start<IdentityServer4.Hosting.MutualTlsEndpointMiddleware.<Invoke>d__4>() MutualTlsEndpointMiddleware.Invoke() [Lightweight Method Call] UseMiddlewareExtensions.<>c__DisplayClass5_1.<UseMiddleware>b__2() [3] AuthenticationMiddleware.<Invoke>d__6.MoveNext() [2] AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6>() [2] AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6>() [2] AuthenticationMiddleware.Invoke() [2] CorsMiddleware.Invoke() [2] [Lightweight Method Call] UseMiddlewareExtensions.<>c__DisplayClass5_1.<UseMiddleware>b__2() [2] BaseUrlMiddleware.<Invoke>d__3.MoveNext() AsyncMethodBuilderCore.Start<IdentityServer4.Hosting.BaseUrlMiddleware.<Invoke>d__3>() AsyncTaskMethodBuilder.Start<IdentityServer4.Hosting.BaseUrlMiddleware.<Invoke>d__3>() BaseUrlMiddleware.Invoke() UseExtensions.<>c__DisplayClass0_2.<Use>b__2() ApplicationBuilderAbpJwtTokenMiddlewareExtension.<>c__DisplayClass0_0.<<UseJwtTokenMiddleware>b__0>d.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Builder.ApplicationBuilderAbpJwtTokenMiddlewareExtension.<>c__DisplayClass0_0.<<UseJwtTokenMiddleware>b__0>d>() AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Builder.ApplicationBuilderAbpJwtTokenMiddlewareExtension.<>c__DisplayClass0_0.<<UseJwtTokenMiddleware>b__0>d>() ApplicationBuilderAbpJwtTokenMiddlewareExtension.<>c__DisplayClass0_0.<UseJwtTokenMiddleware>b__0() UseExtensions.<>c__DisplayClass0_1.<Use>b__1() AuthenticationMiddleware.<Invoke>d__6.MoveNext() [1] AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6>() [1] AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6>() [1] AuthenticationMiddleware.Invoke() [1] CookiePolicyMiddleware.Invoke() HttpRequestDurationMiddleware.<Invoke>d__2.MoveNext() AsyncMethodBuilderCore.Start<Prometheus.HttpMetrics.HttpRequestDurationMiddleware.<Invoke>d__2>() AsyncTaskMethodBuilder.Start<Prometheus.HttpMetrics.HttpRequestDurationMiddleware.<Invoke>d__2>() HttpRequestDurationMiddleware.Invoke() HttpRequestCountMiddleware.<Invoke>d__2.MoveNext() AsyncMethodBuilderCore.Start<Prometheus.HttpMetrics.HttpRequestCountMiddleware.<Invoke>d__2>() AsyncTaskMethodBuilder.Start<Prometheus.HttpMetrics.HttpRequestCountMiddleware.<Invoke>d__2>() HttpRequestCountMiddleware.Invoke() HttpInProgressMiddleware.<Invoke>d__2.MoveNext() AsyncMethodBuilderCore.Start<Prometheus.HttpMetrics.HttpInProgressMiddleware.<Invoke>d__2>() AsyncTaskMethodBuilder.Start<Prometheus.HttpMetrics.HttpInProgressMiddleware.<Invoke>d__2>() HttpInProgressMiddleware.Invoke() CaptureRouteDataMiddleware.Invoke() UseWhenExtensions.<>c__DisplayClass0_1.<UseWhen>b__1() EndpointRoutingMiddleware.Invoke() StaticFileMiddleware.Invoke() [1] CorsMiddleware.Invoke() [1] [Lightweight Method Call] UseMiddlewareExtensions.<>c__DisplayClass5_1.<UseMiddleware>b__2() [1] RequestLocalizationMiddleware.<Invoke>d__5.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.<Invoke>d__5>() AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.<Invoke>d__5>() RequestLocalizationMiddleware.Invoke() AbpRequestLocalizationMiddleware.<InvokeAsync>d__4.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.<InvokeAsync>d__4>() AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.<InvokeAsync>d__4>() AbpRequestLocalizationMiddleware.InvokeAsync() UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d.MoveNext() [2] AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [2] AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [2] UseMiddlewareExtensions.<>c__DisplayClass6_1.<UseMiddlewareInterface>b__1() [2] async OmsExportGridMiddleware.Invoke()at C:\dev\Neuca\src\aspnet-core\src\Neuca.OrderManagementSystem.HttpApi.Host\OmsExtensions\OmsExportGridMiddleware.cs:line 69 AsyncMethodBuilderCore.Start<System.__Canon>() AsyncTaskMethodBuilder.Start<Neuca.OrderManagementSystem.HttpApi.Host.OmsExtensions.OmsExportGridMiddleware.<Invoke>d__2>() OmsExportGridMiddleware.Invoke() AbpCorrelationIdMiddleware.<InvokeAsync>d__3.MoveNext() AsyncMethodBuilderCore.Start<Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.<InvokeAsync>d__3>() AsyncTaskMethodBuilder.Start<Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.<InvokeAsync>d__3>() AbpCorrelationIdMiddleware.InvokeAsync() UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d.MoveNext() [1] AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [1] AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass6_1.<<UseMiddlewareInterface>b__1>d>() [1] UseMiddlewareExtensions.<>c__DisplayClass6_1.<UseMiddlewareInterface>b__1() [1] DeveloperExceptionPageMiddleware.<Invoke>d__9.MoveNext() AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__9>() AsyncTaskMethodBuilder.Start<Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__9>() DeveloperExceptionPageMiddleware.Invoke() ForwardedHeadersMiddleware.Invoke() HostFilteringMiddleware.Invoke() HostingApplication.ProcessRequestAsync() HttpProtocol.<ProcessRequests>d__223<HostingApplication.Context>.MoveNext() AsyncTaskMethodBuilder<VoidTaskResult>.AsyncStateMachineBox<HttpProtocol.<ProcessRequests>d__223<HostingApplication.Context>>.ExecutionContextCallback() ExecutionContext.RunInternal() [4] AsyncTaskMethodBuilder<VoidTaskResult>.AsyncStateMachineBox<HttpProtocol.<ProcessRequests>d__223<HostingApplication.Context>>.MoveNext() AsyncTaskMethodBuilder<VoidTaskResult>.AsyncStateMachineBox<HttpProtocol.<ProcessRequests>d__223<HostingApplication.Context>>.MoveNext() AwaitTaskContinuation.RunOrScheduleAction() [2] Task.RunContinuations() [2] Task.FinishContinuations() [2] Task<ReadResult>.TrySetResult() AsyncTaskMethodBuilder<ReadResult>.SetExistingTaskResult() AsyncValueTaskMethodBuilder<ReadResult>.SetResult() StreamPipeReader.<<ReadAsync>g__Core|36_0>d.MoveNext() AsyncTaskMethodBuilder<ReadResult>.AsyncStateMachineBox<StreamPipeReader.<<ReadAsync>g__Core|36_0>d>.ExecutionContextCallback() ExecutionContext.RunInternal() [3] AsyncTaskMethodBuilder<ReadResult>.AsyncStateMachineBox<StreamPipeReader.<<ReadAsync>g__Core|36_0>d>.MoveNext() AsyncTaskMethodBuilder<ReadResult>.AsyncStateMachineBox<StreamPipeReader.<<ReadAsync>g__Core|36_0>d>.MoveNext() AwaitTaskContinuation.RunOrScheduleAction() [1] Task.RunContinuations() [1] Task.FinishContinuations() [1] Task<int>.TrySetResult() AsyncTaskMethodBuilder<int>.SetExistingTaskResult() AsyncValueTaskMethodBuilder<int>.SetResult() SslStream.<ReadAsyncInternal>d__186<AsyncReadWriteAdapter>.MoveNext() AsyncTaskMethodBuilder<int>.AsyncStateMachineBox<SslStream.<ReadAsyncInternal>d__186<AsyncReadWriteAdapter>>.ExecutionContextCallback() ExecutionContext.RunInternal() [2] AsyncTaskMethodBuilder<int>.AsyncStateMachineBox<SslStream.<ReadAsyncInternal>d__186<AsyncReadWriteAdapter>>.MoveNext() AsyncTaskMethodBuilder<int>.AsyncStateMachineBox<SslStream.<ReadAsyncInternal>d__186<AsyncReadWriteAdapter>>.MoveNext() ThreadPool.<>c.<.cctor>b__87_0() ManualResetValueTaskSourceCore<int>.SignalCompletion() PoolingAsyncValueTaskMethodBuilder<int>.SetResult() DuplexPipeStream.<ReadAsyncInternal>d__27.MoveNext() PoolingAsyncValueTaskMethodBuilder<int>.StateMachineBox<DuplexPipeStream.<ReadAsyncInternal>d__27>.ExecutionContextCallback() ExecutionContext.RunInternal() [1] PoolingAsyncValueTaskMethodBuilder<int>.StateMachineBox<DuplexPipeStream.<ReadAsyncInternal>d__27>.MoveNext() PoolingAsyncValueTaskMethodBuilder<int>.StateMachineBox<DuplexPipeStream.<ReadAsyncInternal>d__27>.System.Threading.IThreadPoolWorkItem.Execute() ThreadPoolWorkQueue.Dispatch() PortableThreadPool.WorkerThread.WorkerThreadStart() Thread.StartCallback() [Native to Managed Transition]

  • User Avatar
    0
    cezary.bojko created

    Api method:

    [HttpGet("")]
    public async Task&lt;PagedResultDto&lt;SearchDeficitListDto&gt;> SearchDeficitList([FromQuery] SearchDeficitList model)
    {
        var query = new SearchDeficitListQuery(model.CustomerIds, model.MaterialIds, model.FilterText, model.MaxResultCount, model.SkipCount, model.Sorting);
        var result = await _mediator.Query&lt;SearchDeficitListQuery, PagedResultDto&lt;SearchDeficitListDto&gt;>(query);
        return result;
    }
    

    Query is consumed by MassTransit IConsumer. In consumer we use Dapper to retrieve data and return it to the controller.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    You can try to set language to en I think the redis call will be fine.

    I open a PR https://github.com/abpframework/abp/pull/12363

    The main reason is that pl-PL lacks localization texts.

Made with ❤️ on ABP v8.2.0-preview Updated on March 25, 2024, 15:11