私の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..."
}
}
問題は、たとえば、 Web.config
ファイルは2つの部分で構成されています。
ただし、構成ファイルはJSON形式を使用しているため、両方のパラメーターを指定することはできませんでした。
質問時に、プロバイダー名をappsetings.json
に設定できませんでした(現在はlocal.settings.json
に名前が変更されています)。しかし、Azure-Functions-teamはこれを変更し、providerName
のデフォルト値をSystem.Data.SqlClient
に設定して、問題を解決しました。
providerName
のデフォルトはSystem.Data.SqlClient
です。手動で設定する必要はありません。接続文字列[〜#〜] x [〜#〜]を追加して、ConfigurationManager.ConnectionStrings["X"]
経由で読み取るだけです。
ファイル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"
}
}
C#コードで使用:
private readonly static string tenantId = ConfigurationManager.AppSettings["tenantId"];
// 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