web-dev-qa-db-fra.com

Définition de la chaîne de connexion SQL pour l'application Web ASP.NET Core dans Azure

J'ai créé une nouvelle application Web ASP.NET Core dans Visual Studio 2015. J'ai également configuré une application Web Azure pour extraire l'application de GitHub et l'exécuter. Cela fonctionne bien, mais j'ai du mal à me connecter à la base de données sur Azure.

Localement, cela fonctionne et il utilise config.json et dans le code Data:DefaultConnection:ConnectionString pour la chaîne de connexion.

Comment puis-je laisser le code tel quel et le faire fonctionner dans Azure également? J'ai essayé de définir les paramètres d'application dans le portail, les chaînes de connexion et les paramètres d'application. Et en utilisant à la fois "SQLCONNSTR_DefaultConnection" et "Data: DefaultConnection: ConnectionString" comme clé.

(La définition des paramètres de l'application ne semble pas fonctionner au fait. Je pense que la valeur que je fournis est trop longue).

Alors, comment puis-je fournir la chaîne de connexion de ma base de données Azure à mon application Web Azure (ASP.NET 5), sans l'archiver dans le contrôle de code source?

Mise à jour Mon Startup.cs ressemble à ceci (voir le fichier complet sur 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;
}

Dans la méthode ConfigureServices, il y a aussi:

services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));

et, également dans la méthode 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
27
Peter

Réponse courte

J'ai essayé de définir les paramètres d'application dans le portail, les chaînes de connexion et les paramètres d'application. Et en utilisant à la fois "SQLCONNSTR_DefaultConnection" et "Data: DefaultConnection: ConnectionString" comme clé.

Tu es proche.

  1. Accédez à Azure Web App> configurer> chaînes de connexion.
  2. Ajoutez une chaîne de connexion avec le nom DefaultConnection.
  3. Utilisez Configuration.Get("Data:DefaultConnection:ConnectionString") pour y accéder.

Exemple utilisant timesheet_db au lieu de DefaultConnection

Ceci est un exemple de ma propre application de feuille de temps. Ma chaîne de connexion a été nommée timesheet_db. Remplacez simplement toutes les instances de cette chaîne par DefaultConnection pour adapter l'exemple à votre cas d'utilisation.

Configuration de l'application Web Azure

Set Connection String

Gestionnaire de contrôle des services d'application web Azure

Le gestionnaire de contrôle des services en ligne à https://myWebAppName.scm.azurewebsites.net/Env affichera les chaînes de connexion.

Connection Strings

Startup.cs

Installez les paramètres de configuration dans Startup pour que les variables d'environnement écrasent le config.json.

public IConfiguration Configuration { get; set; }
public Startup()
{
    Configuration = new Configuration()
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();    <----- will cascade over config.json
}

Configurez la base de données dans Startup.

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<ProjectContext>(options =>
        {
            var connString =
                Configuration.Get("Data:timesheet_db:ConnectionString");
            options.UseSqlServer(connString);
        });
}

Bien sûr, l'exemple utilise une chaîne de connexion nommée timesheet_db. Pour vous, remplacez toutes ses instances par votre propre chaîne de connexion nommée DefaultConnection et tout fonctionnera.

31
Shaun Luttin

Dans RC2, j'ai dû changer la façon dont mes chaînes de connexion étaient lues pour les faire fonctionner dans Azure. Dans mon cas, je devais m'assurer que la chaîne de connexion Azure était nommée "DefaultConnection" et accessible par:

RC1:

{
    "Data": {
        "DefaultConnection": {
            "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;"
        }
    }
}

Accessible par:

var conn = Configuration["Data:DefaultConnection:ConnectionString"];

RC2:

{
  "Data": {

  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;"
  }
}

Accessible par:

var conn = Configuration.GetConnectionString("DefaultConnection");
11
Sharpiro

Vous disposez d'un certain nombre d'options pour définir votre chaîne de connexion. La classe de configuration par défaut obtient les paramètres d'environnement à partir de différentes sources. Vous pouvez définir votre chaîne de connexion dans config.production.json. ou config.staging.json. Voir la classe startup

    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;
    }
1
Thom Kiesewetter

Je pense que vous recherchez SlotSticky Paramètres

Utilisez cette commande dans Azure PowerShell pour définir 2 paramètres d'application comme collant à l'emplacement

Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")

Et cette commande pour définir 2 chaînes de connexion comme collantes à l'emplacement

Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")

Cordialement

0
EvertonMc