Dans ma fonction Azure, j'utilise une bibliothèque qui établit une connexion à un serveur SQL via le ConnectionString à partir du ConfigurationManager, comme ceci:
var cs = System.Configuration.ConfigurationManager.ConnectionStrings["DbConString"].ConnectionString;
DbConnection connection = new SqlConnection(cs);
Maintenant, lorsque je définis la chaîne de connexion DbConString dans le portail via les paramètres de l'application, tout fonctionne correctement. Mais pour le développement local, j'utilise Azure-functions-cli et, malheureusement, je ne sais pas où je devrais placer la chaîne de connexion pour qu'elle soit chargée correctement via le ConfigurationManager.
J'ai essayé de le placer dans le fichier appsettings.json mais sans succès.
Edit: Mon appsettings.json ressemble actuellement à ceci:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": "",
"MyServiceBusReader": "Endpoint=sb://xxxx=",
"DbConStr1": "data source=(localdb)\\MSSQLLocalDB;initial catalog=MyDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework",
"ConnectionStrings": {
"DbConStr2": "data source=(localdb)\\MS..."
}
}
}
Mais je ne peux pas accéder à "DbConStr1" via le ConfigurationManager. Ajouter "DbConStr2" dans "ConnectionStrings" comme décrit ici conduit à une erreur de compilation. Peut-être parce que je n'utilise pas .NET Core?
Edit2: J'ai gâché l'imbrication de "ConnectionStrings". Il doit être au même niveau d'imbrication que "Valeurs":
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": "",
"MyServiceBusReader": "Endpoint=sb://xxxx="
},
"ConnectionStrings": {
"DbConStr": "data source=(localdb)\\MS..."
}
}
Le problème était qu’une chaîne de connexion connue par ex. un fichier Web.config
est composé de deux parties:
Mais comme le fichier de configuration utilise le format JSON, il n'a pas été possible de spécifier les deux paramètres.
Au moment où la question a été posée, il n'était pas possible de définir le nom du fournisseur dans appsetings.json
(désormais renommé local.settings.json
). Mais l'équipe Azure-Functions modifie cela et définit une valeur par défaut pour providerName
sur System.Data.SqlClient
, ce qui résout le problème.
La valeur par défaut de providerName
est System.Data.SqlClient
. Vous n'êtes pas obligé de le configurer manuellement. Ajoutez simplement votre chaîne de connexionXet lisez-la via ConfigurationManager.ConnectionStrings["X"]
.
Ajouter un fichier local.setting.json
{
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"tenantId": "You tenantId",
"resource": "https://management.Azure.com/",
"ClientSecret": "You ClientSecret, Key from App Registry",
"ClientId": "You ClientId, Application ID from App registry",
"subscriptionId": "You subscriptionId",
"resourceGroupName": "Your resourceGroupName",
"serverName": " Your SQL Server",
"databaseNameDW": "Your Database",
"apiversion": "2017-10-01-preview"
}
}
En C # Utilisation du code:
private readonly static string tenantId = ConfigurationManager.AppSettings["tenantId"];
J'ai eu le même problème et j'utilise le standard .net (par opposition au noyau). J'ai ajouté mes paramètres à la section Paramètres de l'application de ma fonction Azure (dans le portail Azure): -
J'ai ensuite téléchargé un zip de la fonction: -
Inclus dans ce téléchargement est une copie de local.settings.json qui inclut les paramètres de mon application au format JSON approprié. J'y accède ensuite via ConfigurationManager.Appsettings ["mysetting"]
Vous devriez pouvoir gérer vos paramètres de configuration avec un fichier appsettings.json
dans la structure de votre projet. Vous pouvez consulter ici pour obtenir un exemple de la structure de dossiers des fonctions Azure.
En outre, this link contiendra des informations sur la gestion des paramètres de configuration avec .NET Core.