Visual Studio 2015で新しいASP.NET Core Webアプリケーションを作成しました。また、GitHubからアプリをプルして実行するAzure Webアプリをセットアップしました。これは正常に機能しますが、Azure上のデータベースへの接続に問題があります。
ローカルでは、これは機能し、config.json
およびコードData:DefaultConnection:ConnectionString
接続文字列。
コードをそのままにして、Azureでも機能させるにはどうすればよいですか?ポータルで、接続文字列とアプリ設定の両方のアプリケーション設定を設定しようとしました。そして、「SQLCONNSTR_DefaultConnection」と「Data:DefaultConnection:ConnectionString」の両方をキーとして使用します。
(アプリの設定を設定しても機能しないようです。指定した値が長すぎると思います)。
それでは、ソース管理でチェックインせずに、Azureデータベースの接続文字列をAzure Webアプリ(ASP.NET 5)に提供するにはどうすればよいですか?
UpdateStartup.csは次のようになります( 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;
}
ConfigureServices
メソッドには、次のものもあります。
services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));
また、ConfigureServices
メソッドでも:
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
ポータルで、接続文字列とアプリ設定の両方のアプリケーション設定を設定しようとしました。そして、「SQLCONNSTR_DefaultConnection」と「Data:DefaultConnection:ConnectionString」の両方をキーとして使用します。
あなたは近いです。
DefaultConnection
という名前の接続文字列を追加します。Configuration.Get("Data:DefaultConnection:ConnectionString")
を使用してアクセスします。DefaultConnection
の代わりにtimesheet_db
を使用する例これは、独自のタイムシートアプリケーションの例です。接続文字列の名前はtimesheet_db
です。その文字列のすべてのインスタンスをDefaultConnection
に置き換えるだけで、使用例をユースケースに適合させることができます。
https://myWebAppName.scm.azurewebsites.net/Env のオンラインサービスコントロールマネージャーに接続文字列が表示されます。
環境変数がconfig.jsonを上書きするように、Startup
で構成設定をセットアップします。
public IConfiguration Configuration { get; set; }
public Startup()
{
Configuration = new Configuration()
.AddJsonFile("config.json")
.AddEnvironmentVariables(); <----- will cascade over config.json
}
Startup
でデータベースを構成します。
public void ConfigureServices(IServiceCollection services)
{
services
.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ProjectContext>(options =>
{
var connString =
Configuration.Get("Data:timesheet_db:ConnectionString");
options.UseSqlServer(connString);
});
}
もちろん、この例ではtimesheet_db
という名前の接続文字列を使用しています。あなたのために、それのすべてのインスタンスをDefaultConnection
という名前の独自の接続文字列で置き換えれば、すべてが機能します。
RC2では、Azureで動作させるために接続文字列の読み取り方法を変更する必要がありました。私の場合、Azure接続文字列に「DefaultConnection」という名前を付け、次の方法でアクセスする必要がありました。
RC1:
{
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;"
}
}
}
アクセス先:
var conn = Configuration["Data:DefaultConnection:ConnectionString"];
RC2:
{
"Data": {
},
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;"
}
}
アクセス先:
var conn = Configuration.GetConnectionString("DefaultConnection");
接続文字列を設定する多くのオプションがあります。デフォルトのセットアップクラスは、さまざまなソースから環境設定を取得します。 config.production.jsonで接続文字列を設定できます。またはconfig.staging.json。スタートアップクラスを見る
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;
}
あなたが探していると思う SlotStickySettings
Azure PowerShellでこのコマンドを使用して、2つのアプリ設定をスロットに固定として設定します
Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")
このコマンドは、2つの接続文字列をスロットに固定するように設定します
Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")
よろしく