Подтвердить что ты не робот

Настройка строки подключения 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
4b9b3361

Ответ 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")

Привет