Hi
RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable ---> System.AggregateException: One or more errors occurred. (Connection failed) ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed
Your RabbitMQ server seems to be unavailable , can you try to make it work?
Hi,
We have document and example https://abp.io/docs/commercial/2.9/how-to/implementing-passwordless-authentication
Hi,
The services are stateless; it will not store the token.
Or you can consider to integration services https://abp.io/docs/latest/framework/api-development/integration-services
okay : )
Hi,
The JS should not send requests to the gateway. The right way is to send requests to the WEB project, which will use a Csharp proxy to send requests to the gateway.
You can remove abp.appPath
.
Hi,
I can't reproduce the problem
Configure<AbpDistributedEventBusOptions>(options =>
{
options.Inboxes.Configure(config =>
{
config.UseDbContext<Qa8002DbContext>();
});
options.Outboxes.Configure(config =>
{
config.UseDbContext<Qa8002DbContext>();
});
});
public class MyTestService : ApplicationService
{
private readonly IDistributedEventBus _eventBus;
public MyTestService(IDistributedEventBus eventBus)
{
_eventBus = eventBus;
}
public async Task CreateEventsAsync()
{
//"shared1", "shared2", "isolate"
var tenants = new[] { "3B7480C1-872D-CBCC-1D43-3A15597E0445", "84A19B02-745B-027B-97ED-3A15597E4331", "EDEA2337-4766-42D6-0B2F-3A15597E7B91" };
foreach (var tenant in tenants)
{
using (CurrentTenant.Change(Guid.Parse(tenant)))
{
await _eventBus.PublishAsync(new TestEventData()
{
Test = tenant
});
}
}
}
}
public class TestEventData
{
public string Test { get; set; }
}
public class TestEventHandler : IDistributedEventHandler<TestEventData>, ITransientDependency
{
private readonly ILogger<TestEventHandler> _logger;
public TestEventHandler(ILogger<TestEventHandler> logger)
{
_logger = logger;
}
public Task HandleEventAsync(TestEventData eventData)
{
var tenantDict = new Dictionary<string, String>
{
["EDEA2337-4766-42D6-0B2F-3A15597E7B91"] = "isolate",
["84A19B02-745B-027B-97ED-3A15597E4331"] = "shared2",
["3B7480C1-872D-CBCC-1D43-3A15597E0445"] = "shared1"
};
_logger.LogInformation("TestEventHandler------------: "+ tenantDict[eventData.Test]);
return Task.CompletedTask;
}
}
[17:18:55 INF] Found 3 events in the outbox.
[17:18:55 INF] Sent 3 events to message broker
[17:18:57 INF] Found 3 events in the inbox.
[17:18:57 INF] TestEventHandler------------: shared1
[17:18:57 INF] Processed the incoming event with id = afabaf6c42563eb6c5e33a15598cf978
[17:18:57 INF] TestEventHandler------------: shared2
[17:18:57 INF] Processed the incoming event with id = 80761db05ef683d318643a15598cf99b
[17:18:57 INF] TestEventHandler------------: isolate
[17:18:57 INF] Processed the incoming event with id = 5268bae9e7c83be0c0fc3a15598cf9a5
Hi,
this may be a problem, I will check it.
Hi,
I can confirm this is a bug,
Here is the temporary solution
[ExposeServices(typeof(LogoutModel))]
public class IdentityServerSupportedLogoutModel : LogoutModel
{
protected IIdentityServerInteractionService Interaction { get; }
public IdentityServerSupportedLogoutModel(
IIdentityServerInteractionService interaction
)
{
Interaction = interaction;
}
public override async Task<IActionResult> OnGetAsync()
{
await SignInManager.SignOutAsync();
var logoutId = Request.Query["logoutId"].ToString();
if (!string.IsNullOrEmpty(logoutId))
{
var logoutContext = await Interaction.GetLogoutContextAsync(logoutId);
await SaveSecurityLogAsync(logoutContext?.ClientId);
await SignInManager.SignOutAsync();
// for ui to see an anonymous user
HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity());
var queryCulture = logoutContext?.Parameters.Get("culture");
var queryUICulture = logoutContext?.Parameters.Get("ui-culture");
var vm = new
{
PostLogoutRedirectUri = logoutContext?.PostLogoutRedirectUri,
ClientName = logoutContext?.ClientName,
SignOutIframeUrl = logoutContext?.SignOutIFrameUrl,
Culture = queryCulture,
UICulture = queryUICulture
};
Logger.LogInformation($"Redirecting to LoggedOut Page...");
return RedirectToPage("./LoggedOut", vm);
}
await SaveSecurityLogAsync();
if (ReturnUrl != null)
{
return LocalRedirect(ReturnUrl);
}
Logger.LogInformation(
$"IdentityServerSupportedLogoutModel couldn't find postLogoutUri... Redirecting to:/Account/Login..");
return RedirectToPage("/Account/Login");
}
protected virtual async Task SaveSecurityLogAsync(string clientId = null)
{
if (CurrentUser.IsAuthenticated)
{
await IdentitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext()
{
Identity = IdentitySecurityLogIdentityConsts.Identity,
Action = IdentitySecurityLogActionConsts.Logout,
ClientId = clientId
});
}
}
}
I have noticed that when distributed events are generated in the tenants with isolated databases, they are added to the AbpEventOutbox table of those databases
Could you share some screenshots?