27 Answer(s)
-
0
The duplicated and cancelled
/api/abp/application-configurationrequests you observe are typically caused by the browser or frontend framework (Angular) making multiple requests in quick succession, often due to application initialization logic or HTTP interceptors. In ABP Angular applications, this endpoint is called on startup to load configuration and localization data.The cancellation and duplication can also occur if a previous request is superseded by a new one before the first completes, or if the user navigates quickly, causing Angular to re-initialize services. The log shows a
System.OperationCanceledException, which is expected when a request is aborted.This behavior is not unique to ABP; it is common in SPAs (Single Page Applications) and is generally harmless unless it causes user-facing issues or performance problems. If you want to further analyze or reduce such requests, consider:
- Checking your Angular app's initialization and HTTP interceptor logic for repeated calls.
- Using browser dev tools to see what triggers the requests.
- Ensuring that only one configuration request is made on app startup.
For more details on monitoring HTTP requests in ABP Studio and troubleshooting, see the official documentation:
- https://abp.io/docs/latest/studio/monitoring-applications
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
-
0
I would still take my chance to troubleshoot and try to eliminate the given issue. Especially taking into consideration, that this error has appeared very rarely in v8.x and now - every time I invoke a request.
-
0
hi
Which project has this error? MVC or Blazor?
Can you try enabling the Debug logs to see more information?
see https://abp.io/support/questions/8622/How-to-enable-Debug-logs-for-troubleshoot-problems
Thanks
-
0
Front-end is an Angular app. The link to the log is shared (sent to your email).
-
0
hi
Can you check the network panel in your browser(Angular app)? The browser might have canceled this request(
https://localhost:44348/api/abp/application-configuration?includeLocalizationResources=false).that this error has appeared very rarely in v8.x and now - every time I invoke a request.
Can you call this endpoint in curl instead of a browser?
Thanks.
-
0
I have run it via curl and the request was successful. But the second request via Angular app was successful, too... So I am not sure this test helps us in some way...
-
0
hi
Can you check the network panel in your browser(Angular app)?
If the browser cancels the request this request(https://localhost:44348/api/abp/application-configuration?includeLocalizationResources=false), then the backend will throw
OperationCanceledExceptionThanks.
-
0
No, there is no response:
However, I have noticed that when I start the host (AuthServer + API host), I get an exception in this method (even though there's nothing wrong with this very middleware - it's rather some common problem, which in a way affects application-configuration API call mostly):
public async Task InvokeAsync(HttpContext httpContext, IAbxRequestContext requestContext, IdentityUserManager userManager) { if (httpContext.Request.Path.Equals("/connect/token", StringComparison.OrdinalIgnoreCase) && httpContext.Request.Method == HttpMethods.Post && httpContext.Request.HasFormContentType) { var form = await httpContext.Request.ReadFormAsync(); if (form.TryGetValue("grant_type", out var grantType) && form.TryGetValue("tenant", out var tenant) && grantType == "switch_tenant") { httpContext.Response.OnStarting(() => { if (httpContext.Response.StatusCode == StatusCodes.Status200OK) { httpContext.Response.Cookies.Append( TenantResolverConsts.DefaultTenantKey, tenant.ToString(), new CookieOptions { Path = "/", HttpOnly = false, Expires = DateTimeOffset.Now.AddYears(10), SameSite = SameSiteMode.Strict, Secure = false }); } return Task.CompletedTask; }); } } await _next(httpContext); }Which looks like this:
2025-10-13 16:44:46.649 -05:00 WRN (-) The operation was canceled.System.OperationCanceledException: The operation was canceled. at System.Threading.CancellationToken.ThrowOperationCanceledException() at System.Threading.CancellationToken.ThrowIfCancellationRequested() at Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(String key, CancellationToken token) at Volo.Abp.Caching.DistributedCache
2.GetAsync(TCacheKey key, Nullable1 hideErrors, Boolean considerUow, CancellationToken token)2025-10-13 16:44:46.800 -05:00 DBG (-) Getting not cache granted permissions from the repository for this provider name,key: R,Role 1 2025-10-13 16:44:46.813 -05:00 WRN (-) The operation was canceled.System.OperationCanceledException: The operation was canceled. at System.Threading.CancellationToken.ThrowOperationCanceledException() at System.Threading.CancellationToken.ThrowIfCancellationRequested() at Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(String key, CancellationToken token) at Volo.Abp.Caching.DistributedCache
2.GetAsync(TCacheKey key, Nullable1 hideErrors, Boolean considerUow, CancellationToken token)2025-10-13 16:44:46.817 -05:00 INF (-) Request finished HTTP/2 GET https://localhost:44308/api/account/profile-picture-file/f6bfc02f-4400-1256-f3db-39fed7dc74b6 - 499 null application/json; charset=utf-8 8763.1875ms 2025-10-13 16:44:46.934 -05:00 ERR (-) ---------- RemoteServiceErrorInfo ---------- { "code": null, "message": "An internal error occurred during your request!", "details": null, "data": null, "validationErrors": null }
2025-10-13 16:44:46.934 -05:00 ERR (-) ORA-01013: User requested cancel of current operation. https://docs.oracle.com/error-help/db/ora-01013/System.OperationCanceledException: ORA-01013: User requested cancel of current operation. https://docs.oracle.com/error-help/db/ora-01013/ ---> Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01013: User requested cancel of current operation. https://docs.oracle.com/error-help/db/ora-01013/ at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsyncHelper(CancellationToken cancellationToken) at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsync(CancellationToken cancellationToken) --- End of inner exception stack trace --- at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsync(CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, Boolean errorsExpected) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable
1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync() at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken) at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository3.FindAsync(TKey id, Boolean includeDetails, CancellationToken cancellationToken) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.Saas.Tenants.TenantStore.GetCacheItemAsync(Nullable1 id, String normalizedName) at Volo.Saas.Tenants.TenantStore.FindAsync(Guid id) at Volo.Abp.MultiTenancy.MultiTenantConnectionStringResolver.FindTenantConfigurationAsync(Guid tenantId) at Volo.Abp.MultiTenancy.MultiTenantConnectionStringResolver.ResolveAsync(String connectionStringName) at Volo.Abp.Uow.EntityFrameworkCore.UnitOfWorkDbContextProvider1.ResolveConnectionStringAsync(String connectionStringName) at Volo.Abp.Uow.EntityFrameworkCore.UnitOfWorkDbContextProvider1.GetDbContextAsync() at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository2.GetDbSetAsync() at Volo.Abp.PermissionManagement.EntityFrameworkCore.EfCorePermissionGrantRepository.GetListAsync(String[] names, String providerName, String providerKey, CancellationToken cancellationToken) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.Abp.PermissionManagement.PermissionStore.SetCacheItemsAsync(String providerName, String providerKey, List1 notCacheKeys) at Volo.Abp.PermissionManagement.PermissionStore.GetCacheItemsAsync(String[] names, String providerName, String providerKey) at Volo.Abp.PermissionManagement.PermissionStore.IsGrantedAsync(String[] names, String providerName, String providerKey) at Volo.Abp.Authorization.Permissions.RolePermissionValueProvider.CheckAsync(PermissionValuesCheckContext context) at Volo.Abp.Authorization.Permissions.PermissionChecker.IsGrantedAsync(ClaimsPrincipal claimsPrincipal, String[] names) at Volo.Abp.Authorization.Permissions.PermissionChecker.IsGrantedAsync(String[] names) at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationAppService.GetAuthConfigAsync() at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationAppService.GetAsync(ApplicationConfigurationRequestOptions options) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, IAuditingHelper auditingHelper, IAuditLogScope auditLogScope) at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController.Get() at lambda_method5124(Closure, Object) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.2025-10-13 16:44:46.938 -05:00 INF (-) Executed action Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController.Get (Volo.Abp.AspNetCore.Mvc) in 7969.9354ms 2025-10-13 16:44:46.941 -05:00 INF (-) Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController.Get (Volo.Abp.AspNetCore.Mvc)' 2025-10-13 16:44:46.957 -05:00 WRN (-) The operation was canceled.System.OperationCanceledException: The operation was canceled. at System.Threading.CancellationToken.ThrowOperationCanceledException() at System.Threading.CancellationToken.ThrowIfCancellationRequested() at Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(String key, CancellationToken token) at Volo.Abp.Caching.DistributedCache
2.GetAsync(TCacheKey key, Nullable1 hideErrors, Boolean considerUow, CancellationToken token)All cancelled operations on server side somehow have to do with this "ORA-01013: User requested cancel of current operation".
-
0
hi
Can you try to use
NullCancellationTokenProviderand test again?public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.Replace(ServiceDescriptor.Transient<ICancellationTokenProvider, NullCancellationTokenProvider>()); }Thanks
-
0
It does not work like this, causing the exception:
Unhandled exception. Autofac.Core.Activators.Reflection.NoConstructorsFoundException: No constructors on type 'Volo.Abp.Threading.NullCancellationTokenProvider' can be found with the constructor finder 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'.
So I tried another way:
[Dependency(ReplaceServices = true)] [ExposeServices(typeof(ICancellationTokenProvider))] public sealed class AlwaysNoneCancellationTokenProvider : ICancellationTokenProvider, ISingletonDependency { public CancellationToken Token => CancellationToken.None; public IDisposable Use(CancellationToken cancellationToken) { return NullDisposable.Instance; } private sealed class NullDisposable : IDisposable { public static readonly NullDisposable Instance = new NullDisposable(); private NullDisposable() { } public void Dispose() { } } }But the error is still there.
-
0
Hi
How can I reproduce this exception locally?
Thanks.
-
0
Honestly - I have no idea, sorry... I just thought you might give me some clue where to look for the route cause, because this only happens with ABP configration API request. Now I received it here. But it's also connected to ABP configuration call:
2025-10-15 01:28:50.966 -05:00 INF (-) Request starting HTTP/1.1 GET https://localhost:44338/api/abp/application-configuration?includeLocalizationResources=false - null null 2025-10-15 01:28:50.968 -05:00 INF (-) CORS policy execution successful. 2025-10-15 01:28:51.634 -05:00 WRN (-) The operation was canceled.System.OperationCanceledException: The operation was canceled. at System.Threading.CancellationToken.ThrowOperationCanceledException() at System.Threading.CancellationToken.ThrowIfCancellationRequested() at Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(String key, CancellationToken token) at Volo.Abp.Caching.DistributedCache
2.GetAsync(TCacheKey key, Nullable1 hideErrors, Boolean considerUow, CancellationToken token)2025-10-15 01:28:51.840 -05:00 INF (3-alexandis) Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' 2025-10-15 01:28:51.867 -05:00 INF (3-alexandis) Route matched with {area = "abp", action = "Get", controller = "AbpApplicationConfiguration", page = ""}. Executing controller action with signature System.Threading.Tasks.Task
1[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions) on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController (Volo.Abp.AspNetCore.Mvc). 2025-10-15 01:28:52.302 -05:00 ERR (-) ORA-01013: User requested cancel of current operation. https://docs.oracle.com/error-help/db/ora-01013/System.OperationCanceledException: ORA-01013: User requested cancel of current operation. https://docs.oracle.com/error-help/db/ora-01013/ ---> Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01013: User requested cancel of current operation. https://docs.oracle.com/error-help/db/ora-01013/ at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsyncHelper(CancellationToken cancellationToken) at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsync(CancellationToken cancellationToken) --- End of inner exception stack trace --- at OracleInternal.ServiceObjects.OracleConnectionInternal.OpenAsync(CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, Boolean errorsExpected) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync() at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken) at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository3.FindAsync(TKey id, Boolean includeDetails, CancellationToken cancellationToken) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.Saas.Tenants.TenantStore.GetCacheItemAsync(Nullable1 id, String normalizedName) at Volo.Saas.Tenants.TenantStore.FindAsync(Guid id) at Volo.Abp.MultiTenancy.TenantConfigurationProvider.FindTenantAsync(String tenantIdOrName) at Volo.Abp.MultiTenancy.TenantConfigurationProvider.GetAsync(Boolean saveResolveResult) at Volo.Abp.AspNetCore.MultiTenancy.MultiTenancyMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)2025-10-15 01:28:52.641 -05:00 INF (-) Request finished HTTP/1.1 GET https://localhost:44338/api/abp/application-configuration?includeLocalizationResources=false - 499 null application/json; charset=utf-8 1758.474ms 2025-10-15 01:28:53.106 -05:00 DBG (3-alexandis) Executing AbpApplicationConfigurationAppService.GetAsync()...
-
0
hi
Can you share a project?
liming.ma@volosoft.com
Thanks.
-
0
No, we are not allowed to share the project. The log and exceptions is all I can provide. Sorry.
-
0
hi
Can you reproduce the problem using a new template project?
-
0
Ok - I have generated a test project (back-end and front-end) via a console. But I cannot run it due to various issues (both in back-end and front-end part). The server error log is inside the archive I have shared with you. The Angular errors have something to do with Angular versions discrepancies and packages incompatibilities, which is weird too, because I used a standard way to install the packages (+ install libs command from yarn). Could you please make it runnable + use Redis Cache instead of Distributed Cache and probably add OpenID server as a separate project (like we have)? Thank you.
-
0
BTW, I have the idea why there could be a timeout. We have a custom configuration which adds so-called module permissions to the output. Please have a look, maybe you have the idea how to improve this. But one way or another, we need to get this information on client-side. I thought about using caching here in a more efficient way. But I'd prefer the permission information remained up-to-date and besides, it won't eliminate the cancellation during the first call (unless we warm-up the configuration data somehow in advance):
[Dependency(ReplaceServices = true)] [ExposeServices(typeof(IAbpApplicationConfigurationAppService))] public class ModulePermissionApplicationConfigurationAppService : AbpApplicationConfigurationAppService, IAbpApplicationConfigurationAppService { private readonly IPermissionGrantRepository _permissionGrantRepository; private readonly IModulePermissionChecker _modulePermissionChecker; public ModulePermissionApplicationConfigurationAppService ( IPermissionGrantRepository permissionGrantRepository, IModulePermissionChecker modulePermissionChecker, IOptions<AbpLocalizationOptions> localizationOptions, IOptions<AbpMultiTenancyOptions> multiTenancyOptions, IServiceProvider serviceProvider, IAbpAuthorizationPolicyProvider abpAuthorizationPolicyProvider, IPermissionDefinitionManager permissionDefinitionManager, DefaultAuthorizationPolicyProvider defaultAuthorizationPolicyProvider, IPermissionChecker permissionChecker, IAuthorizationService authorizationService, ICurrentUser currentUser, ISettingProvider settingProvider, ISettingDefinitionManager settingDefinitionManager, IFeatureDefinitionManager featureDefinitionManager, ILanguageProvider languageProvider, ITimezoneProvider timezoneProvider, IOptions<AbpClockOptions> abpClockOptions, ICachedObjectExtensionsDtoService cachedObjectExtensionsDtoService, IOptions<AbpApplicationConfigurationOptions> options ) : base ( localizationOptions, multiTenancyOptions, serviceProvider, abpAuthorizationPolicyProvider, permissionDefinitionManager, defaultAuthorizationPolicyProvider, permissionChecker, authorizationService, currentUser, settingProvider, settingDefinitionManager, featureDefinitionManager, languageProvider, timezoneProvider, abpClockOptions, cachedObjectExtensionsDtoService, options ) { _permissionGrantRepository = permissionGrantRepository; _modulePermissionChecker = modulePermissionChecker; } public override async Task<ApplicationConfigurationDto> GetAsync(ApplicationConfigurationRequestOptions options) { var result = await base.GetAsync(options); var moduleRoleNames = await _modulePermissionChecker.GetModuleRoleNamesAsync(); Dictionary<string, HashSet<string>> modulePermissionMap; using (CurrentTenant.Change(null)) { var moduleRolePermissionGrants = await _permissionGrantRepository.GetListAsync(); modulePermissionMap = moduleRoleNames .GroupJoin ( moduleRolePermissionGrants.Where(pg => pg.ProviderName == RolePermissionValueProvider.ProviderName), moduleRoleName => moduleRoleName, permissionGrant => permissionGrant.ProviderKey, (moduleRoleName, permissionGrants) => (moduleRoleName, permissionGrantNames: permissionGrants.Select(x => x.Name)) ) .GroupBy(x => x.moduleRoleName.GetModuleId()) .Where(group => group.Key != null) .ToDictionary(x => x.Key, x => x.SelectMany(moduleRolePermission => moduleRolePermission.permissionGrantNames).ToHashSet()); } var ordinaryRolePermissionGrants = await _permissionGrantRepository.GetListAsync(); modulePermissionMap.Add ( "_ordinaryRole", CurrentUser.Roles .GroupJoin ( ordinaryRolePermissionGrants.Where(pg => pg.ProviderName == RolePermissionValueProvider.ProviderName), ordinaryRoleName => ordinaryRoleName, permissionGrant => permissionGrant.ProviderKey, (ordinaryRoleName, permissionGrants) => (ordinaryRoleName, permissionGrantNames: permissionGrants.Select(x => x.Name)) ) .SelectMany(x => x.permissionGrantNames).ToHashSet() ); result.ExtraProperties.Add("modulePermissionMap", modulePermissionMap); return result; } } public class ModulePermissionChecker : IModulePermissionChecker { private readonly IDistributedCache<ModulePermissionCacheItem> _modulePermissionCache; private readonly IDistributedCache<AbpPermissionCacheItem> _abpPermissionCache; private readonly IIdentityUserRepository _identityUserRepository; private readonly IPermissionGrantRepository _permissionGrantRepository; private readonly IPermissionDefinitionRecordRepository _permissionDefinitionRecordRepository; private readonly ICurrentTenant _currentTenant; private readonly ICurrentUser _currentUser; private readonly int CacheExpirationDay = 1; private string ModulePermissionCacheKey => $"ModulePermission:{_currentUser.Id}"; private string AbpPermissionCacheKey => $"AbpPermission:{_currentUser.Id}"; public ModulePermissionChecker ( IIdentityUserRepository identityUserRepository, IPermissionGrantRepository permissionGrantRepository, IPermissionDefinitionRecordRepository permissionDefinitionRecordRepository, IDistributedCache<ModulePermissionCacheItem> modulePermissionCache, IDistributedCache<AbpPermissionCacheItem> abpPermissionCache, ICurrentTenant currentTenant, ICurrentUser currentUser ) { _identityUserRepository = identityUserRepository; _permissionGrantRepository = permissionGrantRepository; _permissionDefinitionRecordRepository = permissionDefinitionRecordRepository; _modulePermissionCache = modulePermissionCache; _abpPermissionCache = abpPermissionCache; _currentTenant = currentTenant; _currentUser = currentUser; } public async Task<HashSet<string>> GetModuleRoleNamesAsync() { if (!_currentUser.IsAuthenticated) { return new HashSet<string>(); } var modulePermissionCacheItem = await _modulePermissionCache.GetOrAddAsync ( ModulePermissionCacheKey, GetModulePermissionCacheItemAsync, () => new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddDays(CacheExpirationDay) } ); return modulePermissionCacheItem.ModuleRoleNames; } public async Task<HashSet<string>> GetAbpPermissionsAsync() { if (!_currentUser.IsAuthenticated) { return new HashSet<string>(); } var abpPermissionCacheItem = await _abpPermissionCache.GetOrAddAsync ( AbpPermissionCacheKey, GetAbpPermissionCacheItemAsync, () => new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddDays(CacheExpirationDay) } ); return abpPermissionCacheItem.Permissions; } private async Task<ModulePermissionCacheItem> GetModulePermissionCacheItemAsync() { var ordinaryRoleNames = await _identityUserRepository.GetRoleNamesAsync(_currentUser.Id.Value); var moduleRoleNames = new HashSet<string>(); foreach (var ordinaryRoleName in ordinaryRoleNames) { var permissionGrantsAkaModuleRoles = await _permissionGrantRepository.GetListAsync(ModulePermissionConsts.RoleProviderName, ordinaryRoleName); permissionGrantsAkaModuleRoles.ForEach(permissionGrantAkaModuleRole => { moduleRoleNames.Add(permissionGrantAkaModuleRole.Name); }); }; return new ModulePermissionCacheItem { ModuleRoleNames = moduleRoleNames }; } private async Task<AbpPermissionCacheItem> GetAbpPermissionCacheItemAsync() { var permissions = new HashSet<string>(); var abpPermissionDefinitions = (await _permissionDefinitionRecordRepository.GetListAsync()).Where(pd => ModulePermissionConsts.AbpRelatedPermissionGroups.Contains(pd.GroupName)); return new AbpPermissionCacheItem { Permissions = abpPermissionDefinitions.Select(x => x.Name).ToHashSet() }; } } -
0
hi
Could you please try removing the custom code and trying again?
In this way we can confirm if there's a problem with your custom code.
Thanks.
-
0
You were right about it: I have removed this custom code and the error is still there, with a default ABP application configuration service. So - please update my test ABP project in the shared link to make it runnable, so we may proceed troubleshooting this issue. Thanks.
-
0
thanks, I will check the
ABP.7zproject. -
0
-
0
Hi.
The custom code was present in our solution, not in ABP test solution. Since it was my only guess why I might get a cancelled ABP app configuration request - I tried to comment the custom app configuration handler. But the error is still there.
As for ABP test solution, as I mentioned - I cannot run it due to some errors. Could you please have a look at the 7z archive and make it runnable for me? Specifically, both front-end and back-end part contain some issues. The front-end part complains about Angular version of some packages, the thing is we are using Angular 19 in our projects, but this test project has been generated for the latest version and therefore uses Angular 20. All in all, this test solution - while not helping us to identify this specific error root cause - still may come in handy for other tests in the future.
As for the error in question - there should be the explanation why specifically ABP application configuration serice invocation (a standard implementation) from a client causes this error. Do you have any ideas to check?
Thank you.
P.S. We still use a traditional app.module.ts / app-routing.module.ts approach in our solution after migration. Could it be the reason of this 'extra-invocation' of ABP application configuration service? In our front-end code, we do not explicitly invoke
AbpApplicationConfigurationService. -
0
hi
I have sent the project source to your inbox.
The Angular and backend app work on my side.
You can add your code to reproduce the problem. Thanks.
-
0
Thank you. But there are some discrepancies between Angular 19 (we are using in ABP framework 9.2.4) and Angular 20 in your test project. I am trying to convert our front-end to "your" structure (app.module.ts-LESS), but I cannot do that.
-
0
hi
I just ran
yarn startto start angular test app.This issue has nothing to do with Angular.
What is the output of
yarn startcommand?Thanks.



