web-dev-qa-db-ja.com

Azure Functionsの構成ファイルから接続文字列を読み込む

私のAzure関数では、次のように、ConfigurationManagerからConnectionStringを介してSQLサーバーへの接続を確立するライブラリを使用しています。

var cs = System.Configuration.ConfigurationManager.ConnectionStrings["DbConString"].ConnectionString;
DbConnection connection = new SqlConnection(cs);

ここで、アプリケーション設定を介してポータルで接続文字列DbConStringを設定すると、すべてが正常に機能します。しかし、ローカル開発ではAzure-functions-cliを使用していますが、残念ながら、接続文字列をどこに配置すればConfigurationManager経由で正しく読み込まれるかわかりません。

Appsettings.jsonファイルに配置しようとしましたが、成功しませんでした。

編集:私のappsettings.jsonは現在次のようになっています:

{
  "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..." 
    } 
  }
}

しかし、ConfigurationManagerから「DbConStr1」にアクセスできません。説明されているように "ConnectionStrings"内に "DbConStr2"を追加すると here はコンパイルエラーになります。多分私は.NET Coreを使用していないからですか?

Edit2:「ConnectionStrings」のネストをめちゃくちゃにしました。 「値」と同じネストレベルでなければなりません。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": "",
    "MyServiceBusReader": "Endpoint=sb://xxxx="
  },
  "ConnectionStrings": {
    "DbConStr": "data source=(localdb)\\MS..." 
  }
}
10
officer

問題は、たとえば、 Web.configファイルは2つの部分で構成されています。

  • 接続文字列自体と
  • プロバイダー名。

ただし、構成ファイルはJSON形式を使用しているため、両方のパラメーターを指定することはできませんでした。

質問時に、プロバイダー名をappsetings.jsonに設定できませんでした(現在はlocal.settings.jsonに名前が変更されています)。しかし、Azure-Functions-teamはこれを変更し、providerNameのデフォルト値をSystem.Data.SqlClientに設定して、問題を解決しました。

providerNameのデフォルトはSystem.Data.SqlClientです。手動で設定する必要はありません。接続文字列[〜#〜] x [〜#〜]を追加して、ConfigurationManager.ConnectionStrings["X"]経由で読み取るだけです。

1
officer

ファイル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"      
    }
}

C#コードで使用:

private readonly static string tenantId = ConfigurationManager.AppSettings["tenantId"];
5
Israel Calderon

私はこれと同じ問題を抱えており、(コアではなく).net標準を使用しています。 Azure関数(Azure Portal内)の[アプリケーション設定]セクションに設定を追加しました:-

enter image description here

次に、関数のZipをダウンロードしました:- enter image description here

このダウンロードには、正しいjson形式でアプリの設定を含むlocal.settings.jsonのコピーが含まれています。次に、ConfigurationManager.Appsettings ["mysetting"]を介してそれらにアクセスします

3
Stephen Garside
// C# Environment Variables example for Azure Functions v1 or v2 runtime
// This works all the way up to but not including .NET Core 2.0
var clientId = Environment.GetEnvironmentVariable("ClientId");
var clientSecret = Environment.GetEnvironmentVariable("ClientSecret");
var aadDomain = Environment.GetEnvironmentVariable("AADDomain");

Local.settings.jsonで行った設定はAzureに反映されないことに注意してください。 Azureポータルのアプリ設定に値を追加してください https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-how-to-use-Azure-function- app-settings

3
reach2saurabh

プロジェクト構造のappsettings.jsonファイルで構成設定を管理できるはずです。 Azure Functionsのフォルダー構造の例については、 ここ をご覧ください。

さらに、 this リンクには、.NET Coreを使用して構成設定を管理する方法に関する詳細があります。

0
awh112