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
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.
- allez à Application Web Azure > configurer > chaînes de connexion.
- Ajouter une chaîne de connexion avec le nom
DefaultConnection
. - 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
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.
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.
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");
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;
}
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")