asp-classic Webページで呼び出された.Net COMオブジェクト内でConfigurationManager.App/ConnectionSettingsを編集するにはどうすればよいですか

私は.NET COMオブジェクトをインスタンス化しており、 ConfigurationManager.AppSettings および ConfigurationManager.ConnectionStrings プロパティを更新したいと考えています。 私はアセンブリの設定ファイルに設定があっても、気づいています。 "ComLib.dll.config" これらの設定は実行時には利用できません。

私は、以下を使用してASPクラシックWebページからCOMオブジェクトを作成するための呼び出しを行います。

Dim COMObject
Set COMObject = Server.CreateObject("COMAPI.COMObject")

私は自分の.NET COMオブジェクト(COMAPI.COMObject)のコンストラクタにステップインするために私のVS2010デバッガを使用します。これは、ロードされているものを確認するために ConfigurationManager を検査した点です。

"Assembly.GetExecutingAssembly" と "Assembly.GetCallingAssembly" の両方が、 "ComLib.dll" アセンブリへのフルパスと同じ結果を示します登録された場所。それは私が期待しているものです。この場所には "ComLib.dll.config" ファイルもありますが、これは ConfigurationManager にはありません。

次のコマンドを使用して AppSettings をクリアしようとすると、例外が発生します。

ConfigurationManager.AppSettings.Clear();

The exception is: "Server object: 006~ASP 0177~Server.CreateObject Failed~80131902"

私の考えは上記の例外は "AppSettingsは読み取り専用です"というASP Classicの解釈ですが、私は100%確信していません。

私が移動するのは、 "ComLib.dll.config" ファイルをロードしてから、 AppSettings の各項目を実行して、 ConfigurationManager.AppSettings が設定されていますが、例外も発生します: "Server object:006〜ASP 0177〜Server.CreateObject Failed〜80131902"

.NET COMオブジェクトで使用するコードは次のとおりです。

Assembly comApiAssembly = Assembly.GetExecutingAssembly();
string comApiLocation = comApiAssembly.Location;
configuration = null;
configuration = ConfigurationManager.OpenExeConfiguration(comApiLocation);
var toLoadEnumberable = configuration.AppSettings.Settings.GetEnumerator();
while (toLoadEnumberable.MoveNext())
{
    var current = (KeyValueConfigurationElement)toLoadEnumberable.Current;
    ConfigurationManager.AppSettings.Add(current.Key, current.Value);
}

この.NET COM LIBは他の.NETアセンブリへの呼び出しに使用されるため、 ConfigurationManager に構成情報が必要です。他の.NETアセンブリでは構成が必要です。

前もって感謝します。

0

1 答え

私はいくつかのヘルプMSDNフォーラムを参照してください。

基本的には、ConfigurationManager.AppSettingsで.Clear/.Add/.Removeを使用する代わりに、設定にアクセスします(存在する場合)。そのキーの値を設定します。

ConfigurationManager.AppSettings["Key"] = "KeyValue";

This updates the ConfigurationManager.AppSettings. This is great because as I access parts of my application which are out of scope from the initial "ASP Classic" -> "COM API" call I am still able to get Application Settings from the ConfigurationManager.

これはすべて、私はまだConfigurationManager.ConnectionStringsを編集する方法を知らない。

切断例外が発生した場合、切断/追加/削除 >。この問題に関するアイデアはありますか?

私は詳細を見つけると、この回答を更新します。

As an update: To get around the ConnectionString settings not having my settings, I have implemented the Unity Container IoC framework. I use a Static instance to host the IoC container and resolve my instances that way.

これを行うことで、COM APIのクラスタイプに対して自分のインターフェースを登録することができます。つまり、コンストラクターインジェクションを介して接続文字列設定を渡すことができます。

2
追加された