web-dev-qa-db-ja.com

AzureのASP.NET Core WebアプリのSQL接続文字列を設定する

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
27
Peter

短い答え

ポータルで、接続文字列とアプリ設定の両方のアプリケーション設定を設定しようとしました。そして、「SQLCONNSTR_DefaultConnection」と「Data:DefaultConnection:ConnectionString」の両方をキーとして使用します。

あなたは近いです。

  1. Azure Webアプリ>構成>接続文字列に移動します。
  2. DefaultConnectionという名前の接続文字列を追加します。
  3. Configuration.Get("Data:DefaultConnection:ConnectionString")を使用してアクセスします。

DefaultConnectionの代わりにtimesheet_dbを使用する例

これは、独自のタイムシートアプリケーションの例です。接続文字列の名前はtimesheet_dbです。その文字列のすべてのインスタンスをDefaultConnectionに置き換えるだけで、使用例をユースケースに適合させることができます。

Azure Webアプリの構成

Set Connection String

Azure Webアプリのサービスコントロールマネージャー

https://myWebAppName.scm.azurewebsites.net/Env のオンラインサービスコントロールマネージャーに接続文字列が表示されます。

Connection Strings

Startup.cs

環境変数が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という名前の独自の接続文字列で置き換えれば、すべてが機能します。

31
Shaun Luttin

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");
11
Sharpiro

接続文字列を設定する多くのオプションがあります。デフォルトのセットアップクラスは、さまざまなソースから環境設定を取得します。 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;
    }
1

あなたが探していると思う SlotStickySettings

Azure PowerShellでこのコマンドを使用して、2つのアプリ設定をスロットに固定として設定します

Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")

このコマンドは、2つの接続文字列をスロットに固定するように設定します

Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")

よろしく

0
EvertonMc