@maliming, We do that as a workaround for now, but it would be better to have the those setting names from the framework itself because want to keep code (.cs and appsetting.json files) to be similar to the orginal version as much as possible for ease of code merging when doing upgrading.
1. Key Vault
We put some credentials in Azure Key Vault and integrate with settings in the appsettting.json
. The secret names are set in following pattern for hirachycal settings.
Unfortunately, they do not support setting name with periods (".").
2. Azure App Service Configuration Normally, Azure App Service allow to override settings via app configuraiton. However, for App Service for Container we cannot do that if the setting name consist of periods (".").
We are having problem overrriding settings in live environments because setting names with periods (".") are not supported (by Auzre App Service Configuration, Key Vault and CD pipeline task to transform appsetting.json). So, please cosider changing to use other delimiter like underscore ("_") please.
Just noticed that you added a step to seed data when creating a tenant. This is an unwanted behavior for us, so we would like to request you to make the data seeding in the TenantAppService.CreateAsync
be optional.
Note: Right now we overriden the method and remove the lines for data seeding, but It may not be good for the future update because we have to keep checking if you changed anything in the method and clone that to our overriden method.
You may do like this:
[Authorize(SaasHostPermissions.Tenants.Create)]
public virtual async Task<SaasTenantDto> CreateAsync(SaasTenantCreateDto input, bool seedData)
{
...
if (seedData)
{
using (CurrentTenant.Change(tenant.Id, tenant.Name))
{
//TODO: Handle database creation?
await DataSeeder.SeedAsync(
new DataSeedContext(tenant.Id)
.WithProperty("AdminEmail", input.AdminEmailAddress)
.WithProperty("AdminPassword", input.AdminPassword)
);
}
}
...
}
We are keening to implement our system as microservices and see that you have the road map to implement 'startup template to create microservices'? in the ABP Commercial. It would be great for us having that since we don't have to do services splitting and service comminication ourself.
So, we keen to know the estimted timeline for the feature release date, please.
@liangshiwei and @alper,
Sorry, It was my fault that I call method InitiliaseTenantDatabaseAsync(tenant)
inside a non-awaitable method. That make the LifttimeScope end before all statements finish and throw the error.
I just change the method to be awaitable and the error gone.
Thank you for your promptly support, however.
@alper No I'm not trying to return entity
to presentation layer, these codes are inside event handler to migrate database after provisioned resources dinamically.
@liangshiwei I use RabbitMq. Sorry that you cannot reproduced the error.
Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.
System.ObjectDisposedException
HResult=0x80131622
Message=Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.
Source=Autofac
StackTrace:
at Autofac.Core.Lifetime.LifetimeScope.CheckNotDisposed()
at Autofac.Core.Lifetime.LifetimeScope.BeginLifetimeScope(Object tag)
at Autofac.Core.Lifetime.LifetimeScope.BeginLifetimeScope()
at Autofac.Extensions.DependencyInjection.AutofacServiceScopeFactory.CreateScope()
at Volo.Abp.AspNetCore.DependencyInjection.HttpContextServiceScopeFactory.CreateScope()
at Volo.Abp.Data.DataSeeder.<SeedAsync>d__7.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Castle.DynamicProxy.AsyncInterceptorBase.<ProceedAsynchronous>d__13.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.<ProceedAsync>d__7.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Volo.Abp.Uow.UnitOfWorkInterceptor.<InterceptAsync>d__3.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.<InterceptAsync>d__2.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Mwp.Data.MwpDbMigrationService.<SeedDataAsync>d__13.MoveNext() in D:\Git\Mwp\aspnet-core\src\Mwp.Domain\Data\MwpDbMigrationService.cs:line 100
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Mwp.Data.MwpDbMigrationService.<InitiliaseTenantDatabaseAsync>d__15.MoveNext() in D:\Git\Mwp\aspnet-core\src\Mwp.Domain\Data\MwpDbMigrationService.cs:line 124
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Mwp.Tenant.TenantResourceManager.<InitialiseTenantDatabase>d__11.MoveNext() in D:\Git\Mwp\aspnet-core\src\Mwp.Domain\Tenant\TenantResourceManager.cs:line 97
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Castle.DynamicProxy.AsyncInterceptorBase.<ProceedAsynchronous>d__13.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.<ProceedAsync>d__7.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Volo.Abp.Uow.UnitOfWorkInterceptor.<InterceptAsync>d__3.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.<InterceptAsync>d__2.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Mwp.Tenant.Events.Result.DatabaseProvisionResultEventHandler.<ProcessSuccessProvisioning>d__5.MoveNext() in D:\Git\Mwp\aspnet-core\src\Mwp.Domain\Tenant\Events\Result\DatabaseProvisionResultEventHandler.cs:line 52
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__139_1(Object state)
at System.Threading.QueueUserWorkItemCallbackDefaultContext.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
Actually, calling MigrateDatabaseSchemaAsync(tenant)
produced this same error as well but I tried wrapping migrator statements inside ServiceScope and its solved the error. I have no idea how to do on SeedDataAync(tenant)
however.
I have found the solution. I must add MwpApplicationContractsModule as a DependsOn module of MwpDbMigratorModule.
Hi dev team,
We are trying to isolate our changes from orginal generated code for ease of upgrading, by creating side projects and configure it to depends on the original module.
Unfortunately, when run Mwp.DbMigrator (side project), there was no records seeded to table AbpPermissionGrants as expected. Please suggest what should we do so that it seed data properly when running from side projects.