web-dev-qa-db-fra.com

Charger la chaîne de connexion à partir d'un fichier de configuration dans les fonctions Azure

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..." 
  }
}
5
officer

Le problème était qu’une chaîne de connexion connue par ex. un fichier Web.config est composé de deux parties: 

  • La chaîne de connexion elle-même et 
  • le nom du fournisseur. 

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"].

0
officer

Ajouter un fichier local.setting.json

 enter image description here

  {
    {
      "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"];
2
Israel Calderon

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): -

 enter image description here

J'ai ensuite téléchargé un zip de la fonction: -  enter image description here

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"] 

1
Stephen Garside

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.

0
awh112