Настройка строки подключения SQL для веб-приложения ASP.NET Core в Azure
Я создал новое веб-приложение ASP.NET Core в Visual Studio 2015. Я также создал веб-приложение Azure, чтобы вытащить приложение из GitHub и запустить его. Это отлично работает, но у меня возникли проблемы с подключением к базе данных на Azure.
Локально это работает, и он использует config.json
и в коде Data:DefaultConnection:ConnectionString
для строки подключения.
Как я могу оставить код таким, какой он есть, и заставить его работать в Azure? Я попытался настроить параметры приложения на портале, как строки подключения, так и параметры приложения. И используя как "SQLCONNSTR_DefaultConnection", так и "Data: DefaultConnection: ConnectionString" в качестве ключа.
(Настройка параметров приложения, похоже, не работает. Я думаю, что значение, которое я предоставляю, слишком длинное).
Итак, как я могу предоставить строку подключения для своей базы данных Azure для своего веб-приложения Azure (ASP.NET 5), не проверив ее в исходном элементе управления?
Обновление
Мой Startup.cs выглядит так (см. полный файл на GitHub):
public Startup(IHostingEnvironment env)
{
var configuration = new Configuration()
.AddJsonFile("config.json")
.AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);
if (env.IsEnvironment("Development"))
{
configuration.AddUserSecrets();
}
configuration.AddEnvironmentVariables();
Configuration = configuration;
}
В методе ConfigureServices
есть также:
services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));
а также в методе ConfigureServices
:
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]))
.AddDbContext<InvoicesDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
// So this is where I want my app in Azure to use the connection string I
// provide in the portal
Ответы
Ответ 1
Короткий ответ
Я попытался настроить параметры приложения на портале, как строки подключения, так и параметры приложения. И используя как "SQLCONNSTR_DefaultConnection", так и "Data: DefaultConnection: ConnectionString" в качестве ключа.
Ты близко.
- Перейдите в веб-приложение Azure > configure > строки подключения.
- Добавьте строку подключения с именем
DefaultConnection
.
- Используйте
Configuration.Get("Data:DefaultConnection:ConnectionString")
для доступа к ней.
Пример использования timesheet_db
вместо DefaultConnection
Это пример из моего собственного приложения расписания. Моя строка подключения была названа timesheet_db
. Просто замените все экземпляры этой строки на DefaultConnection
, чтобы адаптировать пример к вашему прецеденту.
Конфигурация веб-приложений Azure
![Set Connection String]()
Диспетчер управления службами Azure для веб-приложений
Менеджер управления онлайн-сервисами в https://myWebAppName.scm.azurewebsites.net/Env отобразит строки подключения.
![Connection Strings]()
Startup.cs
Установите параметры конфигурации в Startup
, чтобы переменные окружения перезаписали файл config.json.
public IConfiguration Configuration { get; set; }
public Startup()
{
Configuration = new Configuration()
.AddJsonFile("config.json")
.AddEnvironmentVariables(); <----- will cascade over config.json
}
Настройте базу данных в Startup
.
public void ConfigureServices(IServiceCollection services)
{
services
.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ProjectContext>(options =>
{
var connString =
Configuration.Get("Data:timesheet_db:ConnectionString");
options.UseSqlServer(connString);
});
}
Конечно, в примере используется строка соединения с именем timesheet_db
. Для вас замените все экземпляры его собственной строкой соединения с именем DefaultConnection
, и все будет работать.
Ответ 2
В RC2 мне пришлось изменить, как мои строки подключения были прочитаны, чтобы заставить их работать в Azure. В моем случае я должен был убедиться, что строка соединения Azure была названа "DefaultConnection" и доступ к ней:
RC1:
{
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;"
}
}
}
Доступ к:
var conn = Configuration["Data:DefaultConnection:ConnectionString"];
RC2:
{
"Data": {
},
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;"
}
}
Доступ к:
var conn = Configuration.GetConnectionString("DefaultConnection");
Ответ 3
У вас есть несколько вариантов установки строки подключения.
Класс настройки по умолчанию получает настройки среды из разных источников.
Вы можете установить строку подключения в файле config.production.json. или config.staging.json. См. Класс запуска
public Startup(IHostingEnvironment env)
{
// Setup configuration sources.
var configuration = new Configuration()
.AddJsonFile("config.json")
.AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);
if (env.IsEnvironment("Development"))
{
// This reads the configuration keys from the secret store.
// For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
configuration.AddUserSecrets();
}
configuration.AddEnvironmentVariables();
Configuration = configuration;
}
Ответ 4
Я думаю, что вы ищете SlotSticky Настройки
Используйте эту команду в Azure PowerShell, чтобы установить 2 параметра приложения как липкие для слота
Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")
И эта команда, чтобы установить 2 строки подключения как липкие для слота
Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")
Привет