this is not a bug, it's just not implemented in v4x. it'll be available in 5.0
if you don't want to overlap the jobs, there's a very basic solution; add a static variable bool IsTheLastJobStillRunning = false then check this flag if it's true then return else set this true do your work set this false.
Hi rick,
please keep the conversation here.
thanks for the feedback
this is a consultancy topic and not direclty related to ABP code base. if you face a concrete problem in ABP code we would like to help you.
Create the below extension class in your web project.
Set the ForwardedHeaderName to whatever HTTP header the real IP address is in.
public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UseCustomHttpHeaders(this IApplicationBuilder builder)
{
var options = new ForwardedHeadersOptions
{
ForwardedForHeaderName = ForwardedHeadersDefaults.XOriginalHostHeaderName, //"X-Original-Host"
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
};
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
return builder.UseForwardedHeaders(options);
}
}
Open your web module class.
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseCustomHttpHeaders();
}
else
{
app.UseErrorPage();
app.UseCustomHttpHeaders();
app.UseHsts();
app.UseAllElasticApm(context.GetConfiguration());
}
//...
Create a simple controller to test it.
public class Test : Controller
{
public string Index()
{
return "Client IP Address: " + HttpContext.Connection.RemoteIpAddress.ToString();
}
}
Open Postman and make a GET request to TestController

PS: If you want to use X-Forwarded-For header, then remove ForwardedForHeaderName = "X-Original-Host" .
References:
My website is behind a proxy server / load balancer and the client ip is passed in a custom HTTP header.
To get the Identity Server work, we need to use the custom HTTP header.
The client IP is stored in X-Original-Host HTTP header.
Here are some links for 3rd party component integrations. You can also share your article or request a new article.
SyncFusion UI for Blazor https://community.abp.io/articles/using-syncfusion-components-with-the-abp-framework-5ccvi8kc
Telerik UI for MVC (Kendo) https://community.abp.io/articles/how-to-integrate-the-telerik-ui-for-asp.net-core-kendo-components-with-the-abp-mvc-ui-u2voab2a
DevExtreme MVC Components https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv
DevExtreme Angular Component https://community.abp.io/articles/using-devextreme-angular-components-with-the-abp-framework-x5nyvj3i
Telerik Blazor Components https://community.abp.io/articles/how-to-integrate-the-telerik-blazor-components-to-the-abp-blazor-ui-q8g31abb
Angular Material Components https://community.abp.io/articles/using-angular-material-components-with-the-abp-framework-af8ft6t9
Elsa Workflow https://community.abp.io/articles/using-elsa-workflow-with-the-abp-framework-773siqi9
The ABP Commercial and ABP Framework integrates 3rd party solutions to make a bridge between other tools. Be aware that there's no support for the 3rd party libraries, tools, solutions and packages. You can ask your questions to the relevant solutions repository.
...
On the angular side, we have a service, a guard and a directive responsible for permission management. All you need to do is to replace the service with your own. Here is how you can do it
First, create a service of your own. Let's call it CustomPermissionService and extend PermissionService from @abp/ng.core as follows:
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class CustomPermissionService extends PermissionService {
constructor(configStateService: ConfigStateService) {
super(configStateService);
}
getGrantedPolicy$(key: string) {
return super.getGrantedPolicy$(key);
}
}
And in app.module.ts, provide this service as follows:
@NgModule({
// ...
providers: [
// ...
{
provide: PermissionService,
useExisting: CustomPermissionService,
},
],
// ...
})
export class AppModule {}
That's it. Now, when a directive/guard asks for PermissionService from angular, it will inject your service.
For more information about the PermissionService, you can examine it here. https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/services/permission.service.ts
We looking forward the sample code on Angular UI to override the Permissions grant for super User/Admin. We did on API side, looking for angular Sample UI.