10

Azure 管理ポータルの [構成] -> [接続文字列] (リンクされたリソース) で接続文字列を構成しました。

ここに画像の説明を入力

これらの接続文字列は何に役立ちますか?

コンを削除してみました。web.config ファイルからの文字列なので、ここから読み取る必要がありますが、そうではありません。

他に方法はありますか?

基本的に、これらの接続文字列で web.config の接続文字列をオーバーライドして、運用環境で使用できるようにしたいと考えています。

Application_Startメソッドに以下を追加しました。

var sb = new StringBuilder();
var appConfig = ConfigurationManager.OpenMachineConfiguration();  
foreach (ConnectionStringSettings conStr in appConfig.ConnectionStrings.ConnectionStrings)
  sb.AppendFormat("Name: {0}, ConnectionString: {1}\n", conStr.Name, conStr.ConnectionString);
throw new Exception(sb.ToString());

結果は次のとおりです。

名前: LocalSqlServer、接続文字列: データ ソース=.\SQLEXPRESS;統合セキュリティ=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;ユーザー インスタンス=true

上記も試してみましたがConfigurationManager.ConnectionStrings、サーバー(Azure)接続文字列がありませんでした。

4

2 に答える 2

12

ポータルの接続文字列を使用すると、web.configで定義された接続文字列をオーバーライドできます。

ローカルで開発している場合は、おそらく localhost\SQLExpress などにあるデータベースを使用します。web.config 変換をセットアップせずにデプロイすると、Windows Azure で実行されている Web サイトが依然として localhost\SQLExpress を指していることになり、これは望ましくありません。

ポータルの接続文字列を使用すると、web.config で既に定義されている既存の接続文字列をオーバーライドできます。ポータルで構成されたものと同じ名前の接続文字列が web.config に含まれていない場合、その接続文字列は追加されず、実行時にアクセスできません。これが発生している問題である可能性があります。

これを修正するには、ポータルに既に追加したものと同じ名前の接続文字列を web.config ファイルに追加するだけです。

更新:コメントで既に説明したように、Windows Azure Web サイトは web.config ( source ) を物理的に変更するのではなく、実行時にこれを行います。したがって、実行時にどの AppSettings と ConnectionStrings が実際に使用可能かを確認するには、次のようにします。

コントローラ:

public ActionResult Index()
{
  ViewBag.ConnectionStrings =
    ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>();
  ViewBag.AppSettings = ConfigurationManager.AppSettings;
  return View();
}

意見:

<h3>ConnectionStrings:</h3>
<ul>
  @foreach (var setting in ViewBag.ConnectionStrings)
  {
    <li>@setting.Name: @setting.ConnectionString</li>
  }
</ul>
<h3>AppSettings:</h3>
<ul>
  @foreach (var s in ViewBag.AppSettings)
  {
    <li>@setting: @System.Configuration.ConfigurationManager.AppSettings[s]</li>
  }
</ul>
于 2012-12-08T22:41:46.293 に答える
3

2日経って、やっと動くようになりました。将来誰かに役立つことを期待して、ここに私のソリューションを追加しています。

環境

  • Azure API APP (ただし、理論的には、他の種類のプロジェクトでも機能するはずです)
  • SQL DB (Azure でホスト)。明らかに任意のデータベースにすることができます
  • EF 6.0 - データベース ファースト アプローチ
  • 接続文字列は、Azure の [アプリケーションの設定] -> [接続文字列] セクションに保存されます。以下に示す画像

Azure からのスナップショット -> API アプリ -> アプリケーション設定 -> 接続文字列

私がやりたかったこと は、接続文字列を Azure に配置し、@Sandrino Di Mattia が述べたように、そこから動的に取得することでした。

私のために働いたステップ

  1. web.config で connectionStrings を作成します。

`

<connectionStrings>
    <add name="dbConnectionStringForAzure" connectionString="Local Connection String" providerName="System.Data.EntityClient"/>
  </connectionStrings>

`

providerName はSystem.Data.EntityClientであり、 System.Data.SqlClientではないことに注意してください。

補足:また、プロジェクトを発行したら、web.config.xml で接続文字列を確認できます。projectapiurl.scm.azurewebsites.net に移動します。

[メニュー] -> [デバッグ コンソール] -> [PowerShell] -> [Web.config ファイルの編集] に移動します。(web.config ファイルを取得する方法は他にもあります。お好みの方法を使用してください。)

注:ここでは、Azure によって自動生成された別の接続文字列が見つかる場合があります。使用していないので削除しても問題ありません。

  1. Azure -> プロジェクトとアプリケーションの設定に移動します。以下に示すように詳細を追加します。

    名前 =dbConnectionStringForAzure

    値 =Provider=System.Data.SqlClient; metadata=res://*/csdlModel.csdl|res://*/ssdlModel.ssdl|res://*/mslModel.msl; Provider Connection String ='Data Source=server.database.windows.net,1433;initial catalog=database;User ID=username;Password=password;MultipleActiveResultSets=True;App=EntityFramework;'

  2. 3 番目のドロップダウンの前面で、CUSTOM を選択します。そうしないと、Azure が接続文字列のプロバイダー名に System.Data.SqlClient (または選択内容に応じて他のプロバイダー) を追加することが重要になりますが、これは望ましくありません。

  3. 保存

この段階で、Azure は実行時にこの接続文字列を使用する必要があります。確認したい!? 上記の @Sandrino Di Mattia または @Shaun Luttin によるこの SO 投稿で提案されていることと同様のことを行います C#.NET を使用して Windows Azure Web サイトにリンクされている SQL Azure データベースの接続文字列を取得します

または、次のコードをかみそりテンプレートに入れます。

    <p>Value of dbConnectionStringForAzure  :
    @System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString    
    </p>

一方、DbContext コンストラクターで接続文字列名を設定しました。

        public MyEntities() : base("name=dbConnectionStringForAzure")
        {

        }

ここで、API を呼び出すと、Azure に保存されている接続が動的に使用されました。

数十の投稿と追加のコーヒーのショットに感謝します!

于 2016-06-21T08:10:53.757 に答える