4

実行時に Web アプリケーションの別のデータベースを切り替えようとしています。

シナリオ 1 つの asp.net Web アプリケーションと、さまざまな顧客用のさまざまなデータベースがあります。接続文字列、特定の顧客 ID とパスワードのマッピング テーブルを保持している共通データベースから特定の接続文字列値を切り替えようとしています。 gin 共通データベースから接続文字列を取得し、web.config ファイルの接続文字列セクションを編集して、実行時に選択した接続文字列を置き換えます。ログインイベントに次のコードを追加してこれを行っています

                conectionString = cString;
                Configuration openWebConfiguration = WebConfigurationManager.OpenWebConfiguration("~");
                ConnectionStringsSection sections = openWebConfiguration.GetSection("connectionStrings") as ConnectionStringsSection;
                if (sections != null)
                {
                    sections.ConnectionStrings["ConnectionStringName"].ConnectionString = conectionString;
                    ConfigurationManager.RefreshSection("ConnectionStringName");
                    openWebConfiguration.Save();

                }

.problemを使用してページ上の接続文字列を読んでいますConfigurationManagerが、Web 構成ファイルが変更されていますが、使用して別のページを呼び出した後Response.Redirect、例外がスローされます。例外は「コードが最適化されているか、ネイティブ フレームがオンになっているため、式を評価できません」コール スタックの一番上に「これはクロス スレッド環境で発生するものだとわかりました。私の質問は

  • 上記の例外の正確な理由は何ですか?
  • Asp.net のどのページ ライフ サークルが Web 構成ファイルから設定を読み取りますか?
  • 上記のシナリオを実装できる適切な方法は何ですか?
4

1 に答える 1

1

なぜこの質問がまだ答えられていないように見えるのか疑問に思っています.OK私はいくつかの答えを自分で見つけました.それは間違っているかもしれませんが、いくつかは私に何らかの意味を与えています.

1)正確な理由はわかりませんが、これはアプリケーションの実行中にコードが変更されたために発生するものです

2)私の検索に基づいて、IISサーバーの起動時にアプリケーションによってWEB Configファイルの読み取りが開始されます。したがって、WEB Config内で変更する値はすべて、IISサーバーを再起動してメモリにロードする必要があります。接続文字列を動的に変更しますが、アプリケーションは以前の接続文字列で実行されます。そのため、IIS を再起動して新しい接続文字列を読み込む必要はありません。

注: 既存の接続文字列を変更することは、新しい接続文字列を WEB 構成に追加することとは異なります。

3) 共通のデータベースを使用しました。ここでは、いくつかのデータベースのさまざまな接続文字列の認証の詳細があります。Web 構成には、上記のマスター データベースの接続文字列があります。ユーザーが認証の詳細を指定すると、接続文字列が選択されて読み込まれます。 as new connection string .したがって、残りのプロセスはその接続文字列に基づいています。

上記の回答に対する新しい議論は非常に高く評価できます。私は学びたいと思っているので、他の開発者からの修正が必要です。

于 2012-10-15T20:35:41.700 に答える