Définition de la chaîne de connexion SQL pour ASP.NET application Web de base en Azure

j'ai créé un nouveau ASP.NET application Web de base dans Visual Studio 2015. J'ai aussi mis en place une application Web Azure pour tirer l'application de GitHub et l'exécuter. Ça marche très bien, mais j'ai du mal à me connecter à la base de données sur Azure.

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

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

(Paramètre les Paramètres de l'Application ne semble pas fonctionner. Je pense que la valeur que j'offre est trop long).

alors comment puis-je fournir la chaîne de connexion pour ma base de données Azure à mon application Web Azure (ASP.NET 5), sans le vérifier dans le contrôle à la source?

mise à Jour Mon Démarrage.cs ressemble à ceci (voir le dossier 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 le ConfigureServices méthode, il y a aussi:

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

et aussi, en l' ConfigureServices méthode:

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
23
demandé sur Set 2015-06-28 12:10:40

4 réponses

courte réponse

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

vous êtes proche.

  1. allez à Application Web Azure > configurer > chaînes de connexion.
  2. Ajouter une chaîne de connexion avec le nom DefaultConnection.
  3. Utiliser Configuration.Get("Data:DefaultConnection:ConnectionString") pour d'accès.

Exemple d'utilisation 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é timesheet_db. Il suffit de remplacer toutes les occurrences de la chaîne DefaultConnection pour adapter l'exemple à votre cas d'utilisation.

Azure web de configuration de l'application

Set Connection String

Azure web app gestionnaire de contrôle de service

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

Connection Strings

Démarrage.cs

configuration des paramètres de configuration dans Startup de sorte que les variables d'environnement écrasent la configuration.json.

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

Configurer la base de données 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, remplacer toutes les instances de votre propre chaîne de connexion nommée DefaultConnection et tout fonctionnera.

28
répondu Shaun Luttin 2015-06-30 15:56:50

dans RC2 j'ai dû changer la façon dont mes chaînes de connexion étaient lues pour les faire fonctionner en Azure. Dans mon cas, j'ai dû m'assurer que la chaîne de connexion Azure s'appelait "DefaultConnection", et qu'elle était 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");
10
répondu Sharpiro 2016-05-29 15:24:27

Vous avez un certain nombre d'options pour configurer votre chaîne de connexion. La classe de configuration par défaut reçoit les paramètres d'environnement de différentes sources. Vous pouvez configurer votre chaîne de connexion dans config.production.json. ou config.Staging.json. Voir le démarrage de la classe

    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
répondu Thom Kiesewetter 2015-06-28 12:07:53

je pense que vous êtes à la recherche pour SlotSticky Paramètres

utilisez cette commande dans Azure PowerShell pour définir 2 paramètres de l'application comme collant à la fente

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

et cette commande pour mettre 2 chaînes de connexion aussi collantes à la fente

Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")
0
répondu EvertonMc 2015-06-29 08:00:14