ABP 租户创建失败
ABP tenant creation is failing
我目前正在评估 ABP 3.9,但无法创建租户。
执行此代码时失败:
CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id));
这是我得到的异常:
Mvc.ExceptionHandling.AbpExceptionFilter - Format of the initialization string does not conform to specification starting at index 0.
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)
at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection()
相同的 Entity Framework 连接可与我添加的其他 ApplicationService
类 一起使用。不知道为什么仅针对租户创建失败。我正在扩展示例模板,可在 ASP.NET 样板网站上免费获得。
非常感谢您的帮助。
问候,
再努
在 TenantAppService class 中的 Create 方法下注释掉了从输入 DTO 创建加密连接字符串的代码。添加了一种从配置中读取连接字符串的方法,这在我的情况下有效,因为我有一个数据库用于所有 tenants.This 数据库将非常小,并且它将仅存储有关租户的元数据,而大部分应用程序数据将在 Azure 中存储。
public override async Task<TenantDto> Create(CreateTenantDto input)
{
CheckCreatePermission();
// Create tenant
var tenant = ObjectMapper.Map<Tenant>(input);
//this code is commented since we have single database for all tenants
//tenant.ConnectionString = input.ConnectionString.IsNullOrEmpty()
// ? null
// : SimpleStringCipher.Instance.Encrypt(input.ConnectionString);
//This would read connection string from configuration and pass it to
//connectionstring property of AbpTenant
var configuration =
AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
tenant.ConnectionString = SimpleStringCipher.Instance.Encrypt(configuration.GetConnectionString(OneCloudConsts.ConnectionStringName));
直到代码部署到 Azure 中我才意识到它最终会出现异常 "System.ApplicationException: Could not find content root folder"。
我很幸运,这里有关于相同问题的讨论 https://github.com/aspnetboilerplate/aspnetboilerplate-templates/issues/43 并且修复是相同的
var startupPath = System.IO.Directory.GetCurrentDirectory();
var 配置 = AppConfigurations.Get(startupPath);
tenant.ConnectionString = SimpleStringCipher.Instance.Encrypt(configuration.GetConnectionString(OneCloudConsts.ConnectionStringName));
我目前正在评估 ABP 3.9,但无法创建租户。
执行此代码时失败:
CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id));
这是我得到的异常:
Mvc.ExceptionHandling.AbpExceptionFilter - Format of the initialization string does not conform to specification starting at index 0.
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)
at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection()
相同的 Entity Framework 连接可与我添加的其他 ApplicationService
类 一起使用。不知道为什么仅针对租户创建失败。我正在扩展示例模板,可在 ASP.NET 样板网站上免费获得。
非常感谢您的帮助。 问候, 再努
在 TenantAppService class 中的 Create 方法下注释掉了从输入 DTO 创建加密连接字符串的代码。添加了一种从配置中读取连接字符串的方法,这在我的情况下有效,因为我有一个数据库用于所有 tenants.This 数据库将非常小,并且它将仅存储有关租户的元数据,而大部分应用程序数据将在 Azure 中存储。
public override async Task<TenantDto> Create(CreateTenantDto input)
{
CheckCreatePermission();
// Create tenant
var tenant = ObjectMapper.Map<Tenant>(input);
//this code is commented since we have single database for all tenants
//tenant.ConnectionString = input.ConnectionString.IsNullOrEmpty()
// ? null
// : SimpleStringCipher.Instance.Encrypt(input.ConnectionString);
//This would read connection string from configuration and pass it to
//connectionstring property of AbpTenant
var configuration =
AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
tenant.ConnectionString = SimpleStringCipher.Instance.Encrypt(configuration.GetConnectionString(OneCloudConsts.ConnectionStringName));
直到代码部署到 Azure 中我才意识到它最终会出现异常 "System.ApplicationException: Could not find content root folder"。
我很幸运,这里有关于相同问题的讨论 https://github.com/aspnetboilerplate/aspnetboilerplate-templates/issues/43 并且修复是相同的
var startupPath = System.IO.Directory.GetCurrentDirectory(); var 配置 = AppConfigurations.Get(startupPath); tenant.ConnectionString = SimpleStringCipher.Instance.Encrypt(configuration.GetConnectionString(OneCloudConsts.ConnectionStringName));