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?

Markdown supported.
Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)

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

    hi

    I will check this again.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    cezary.bojko created

    Hey, Any news on this issue?

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • 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.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    Still working on it.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • 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

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • 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?

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • 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]

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • 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.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • 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.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.8.0-preview. Updated on September 24, 2026, 12:09
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.