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
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.
DefaultConnection
.Configuration.Get("Data:DefaultConnection:ConnectionString")
pour y accéder.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.
Le gestionnaire de contrôle des services en ligne à https://myWebAppName.scm.azurewebsites.net/Env affichera les chaînes de connexion.
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.
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");
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;
}
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