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<PagedResultDto<SearchDeficitListDto>> 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<SearchDeficitListQuery, PagedResultDto<SearchDeficitListDto>>(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 v9.2.0-preview. Updated on January 23, 2025, 12:17