Thanks but I don't think that's an option for me, since all my projects are already using the abp provided implementation, and we don't want to re-implement something the framework is offering, it would be great of the abp implementation could add a property object with information of the particular task so that we can then use BackgroundJob to requeue it..
You mean stop using
transactionProcessingJob : AsyncBackgroundJob<TArgs>
??
Hi,
I had already tried something with BackgroundJob
before I posted, I just couldn't get it to work and Is till don't understand how to apply this. In essence a class that processes a type of job
public class TransactionProcessingJob : AsyncBackgroundJob<TransactionProcessingArgs>, ITransientDependency
has method
public override async Task ExecuteAsync(TransactionProcessingArgs args)
{
try
{
IUnitOfWorkManager unitOfWorkManager = _serviceProvider.GetRequiredService<IUnitOfWorkManager>();
using (unitOfWorkManager.Begin())
{
// stuff in here
}
}
catch (Exception ex)
{
Logger.LogError(ex, "Unable to process transaction {TransactionId}", args.TranId);
await _emailSender.QueueAsync(
to: _config["Notifications:Recipients"],
subject: $"Error processing transaction {args.TranId} {args.Channel} {args.ObjectType} {args.ExternalID} for Tenant: {tenantId}",
body: $"{ex.Message}</br>{ex.InnerException?.Message}"
);
using (_currentTenant.Change(tenantId != default ? tenantId : null))
{
var transaction = await _transactionRepository.GetAsync(args.TranId);
transaction.Error = $"{ex.Message}\n{ex?.InnerException?.Message}";
await _transactionRepository.UpdateAsync(transaction);
}
throw;
}
}
In the catch block, it'd be nice to capture job id and set it on a property of the transaction, this way from a dashboard page, using TransactionAppService
The user can retry that transaction.
I had already tried to do this adapating an implementation in one of the modules that grabs a distributed lock and IBackgroundJobStore
to use FindAsync(guid) to retrieve the job, but since I don't have the job id I can't use IBackgroundJobExecuter
to execute the job.
I'm having a problem with jobs that are processed via hangfire module. When a job fails it can be requeued through the hangifre ui, but this interface is more backend than frontend user. I have a page in the application for front end user to see jobs in error state. I want them to be able to click a button and retry this job (not enqueue again, but reprocess failed job just like in backend ui). I've tried many things but in the end I always reach a point where I get stuck.
During job execution can I capture the job id somehow to set it in the error property of my transaction and then use this to retry the job when the user presses the button to retry?
Hi Maliming,
Thanks for feedback, yes I did that before opening ticket.
<PackageReference Include="Volo.Abp.LeptonTheme.Management.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="7.1.1" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Swashbuckle" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Domain" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.Web.OpenIddict" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.OpenIddict.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Saas.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.Application" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.BlobStoring.Database.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Components.WebAssembly.LeptonTheme" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.OpenIddict.Pro.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.TextTemplateManagement.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LanguageManagement.Blazor.WebAssembly" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Components.Server.LeptonTheme" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Blazor.Server" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Domain" Version="7.1.1" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Swashbuckle" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.Web.OpenIddict" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Blazor.Server" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Blazor.Server" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.Blazor.Server" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Blazor.Server" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.Blazor.Server" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.Application" Version="7.1.1" /> <PackageReference Include="Volo.Saas.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.BlobStoring.Database.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Commercial.SuiteTemplates" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="7.1.1" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Swashbuckle" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Saas.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Domain" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.Client" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Authentication.OpenIdConnect" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Http.Client.IdentityModel.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Http.Client.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Swashbuckle" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.HttpApi.Client" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.HttpApi.Client" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.HttpApi.Client" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.HttpApi.Client" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.Web" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.HttpApi.Client" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.HttpApi.Client" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.LeptonTheme.Management.Domain" Version="7.1.1" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Swashbuckle" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AuditLogging.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Public.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Account.Pro.Admin.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Identity.Pro.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Web" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.Web" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.Application" Version="7.1.1" /> <PackageReference Include="Volo.Saas.Host.HttpApi" Version="7.1.1" /> <PackageReference Include="Volo.Saas.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.BlobStoring.Database.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.BackgroundJobs.Abstractions" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Authorization.Abstractions" Version="7.1.1" /> <PackageReference Include="Volo.Abp.BackgroundJobs.Abstractions" Version="7.1.1" /> <PackageReference Include="Volo.Abp.BackgroundJobs.HangFire" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Ddd.Application" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AutoMapper" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Emailing" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Components.Server.Theming" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Components.WebAssembly.Theming" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AutoMapper" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Components.Web.Theming" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Validation" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Ddd.Domain" Version="7.1.1" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Http.Client" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="7.1.1" /> <PackageReference Include="Volo.Abp.MongoDB" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AutoMapper" Version="7.1.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared" Version="7.1.1" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore.Sqlite" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Http.Client.IdentityModel" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="7.1.1" /> <PackageReference Include="Volo.Abp.Authorization" Version="7.1.1" /> <PackageReference Include="Volo.Abp.TestBase" Version="7.1.1" />
Upgrade 6.0 to 7, now receiving this message. if I go to the domain.shared project where the method is used and press F12 it browses to the definition of the method so i can see it still exists.
InnerException {"Method not found: 'Volo.Abp.Localization.LocalizationResource Volo.Abp.Localization.LocalizationResourceExtensions.AddBaseTypes(Volo.Abp.Localization.LocalizationResource, System.Type[])'."} System.Exception {System.MissingMethodException}
created and applied migration to db.
Seems although there was no error popping up I needed to implement this patch for chrome https://community.abp.io/posts/patch-for-chrome-login-issue-identityserver4-samesite-cookie-problem-weypwp3n
After that login was possible on blazor side but angular had a refresh loop, the console shows error regarding mixed content being blocked, so adding this to the head in index.html of angular app resolved.
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
using blazor server for the main admin application, also an angular application
I did indeed use the middleware.
app.Use(async (ctx, next) =>
{
var configuration = ctx.RequestServices.GetRequiredService<IConfiguration>();
ctx.SetIdentityServerOrigin(configuration["App:SelfUrl"]);
await next();
});
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseHttpsRedirection();
For more context:
I've tried running the solution in docker with the auth server behind an nginx load balancer.
server {
listen 443 ssl;
server_name blazor.mydomain.com;
ssl_certificate /etc/nginx/certs/app-cert.pem;
ssl_certificate_key /etc/nginx/certs/app-cert-key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://blazorapp;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Configuration for WebSockets
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_cache off;
# WebSockets were implemented after http/1.0
proxy_http_version 1.1;
# Configuration for ServerSentEvents
proxy_buffering off;
# Configuration for LongPolling or if your KeepAliveInterval is longer than 60 seconds
proxy_read_timeout 100s;
}
location /signalr-hubs {
proxy_pass http://blazorapp;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /wsapp/ {
proxy_pass http://blazorapp;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_buffering off;
}
}
Added this per Microsoft documentation https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-6.0#forwarded-headers-middleware-order to the blazormodule
private void ConfigureForwardedHeaders(ServiceConfigurationContext context)
{
context.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
....
app.Use(async (ctx, next) =>
{
var configuration = ctx.RequestServices.GetRequiredService<IConfiguration>();
ctx.SetIdentityServerOrigin(configuration["App:SelfUrl"]);
await next();
});
....
}
Trying to log in from the blazor app, it seems the login process succeeds but when it returns to the main page, it is not logged in.
Trying to log in on the angular side the login page just refreshes after clicking log in
The only thing i see in the log is below but im not sure this is relevant
hello support, would you take a look at a project? Do you have a guide that shows the settings between prod and dev operational for us new devs?