2

ASP.NETSQLメンバーシッププロバイダーを使用しているWebロールがあります。現在、構成はWeb.Configファイルにあります。接続文字列をWeb.Configに含めるのではなく、Webロール設定として構成したいと思います。これを使用する主な理由は、azureプロジェクトで構成をセットアップして、さまざまなホストサービス(dev、qaなど)に公開できるようにするためです。現在、必要なたびにweb.configを手動で編集する必要があります。別のサービスに公開します。

これをどのように達成できるかについて、いくつかのアイデアがあります。

  1. SQLプロバイダーをラップし、それにカスタム構成を提供するカスタムメンバーシッププロバイダーを記述します。
  2. WebロールOnStartメソッドに何かを入れて、Web.configファイルの接続文字列を変更します。

誰かが以前にこのようなことをしたことがありますか、またはどのオプションが最適であるかについての推奨事項がありますか、またはこれを達成する方法について別のアイデアがありますか?

4

1 に答える 1

3

Windows Azure SDKを使用すると、環境ごとに複数のサービス構成を設定できます。ただし、web.configの変更は少し難しいです。あなたの場合、サービス構成から接続文字列を読み取り、それをweb.configに書き込むコード(またはスタートアップタスク)を作成することをお勧めします。

Andyのブログ投稿「WebRoleStartupでweb.configをプログラムで変更する」では、これを行う方法を正確に説明しています。

public override bool OnStart()
{
    using (var server = new ServerManager())
    {
        // get the site's web configuration
        var siteNameFromServiceModel = "Web"; // TODO: update this site name for your site. 
        var siteName =
            string.Format("{0}_{1}", RoleEnvironment.CurrentRoleInstance.Id, siteNameFromServiceModel);
        var siteConfig = server.Sites[siteName].GetWebConfiguration();

        // get the appSettings section
        var appSettings = siteConfig.GetSection("appSettings").GetCollection();

        AddElement(appSettings, "deploymentId", RoleEnvironment.DeploymentId);
        AddElement(appSettings, "internalEndpointPort", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints
            .First(t=>t.Key=="InternalEndpoint1").Value
            .IPEndpoint.Port.ToString());

        server.CommitChanges();
    }
    return base.OnStart();
}
于 2012-06-21T20:44:40.153 に答える