- 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)
-
0
hi
I will check this again.
-
0
Hey, Any news on this issue?
-
0
hi I am still working on it. I will leave a message if I'm done.
-
0
Still working on it.
-
0
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
-
0
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?
-
0
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]
-
0
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.
-
0
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.