1

IIS 7.5のASP.OLD(クラシック)ページから.NET4クラスライブラリを呼び出しています。すべての相互運用はOKで、通話は機能しています。私の問題は、クラスライブラリが呼び出されたときに.configファイルから設定を取得していないことです。

ASP.OLDファイルが提供されているのと同じフォルダーにwe.configがあります。クラスライブラリが登録されているフォルダにApp.Configがあります。

IISフォルダーのapp.configファイルとクラスライブラリフォルダーのweb.configを試したこともありますが、それでも喜びはありません。

IISアプリプールはクラシックパイプラインモードで実行されています。WebサイトのIISマネージャーでアプリケーション設定を開くと、値が表示されます。

.configファイルはどこに置くべきですか?それは何と呼ばれるべきですか?

タ!N

4

1 に答える 1

1

問題は、ASP から COM 相互運用機能を介して .NET dll を呼び出すと、.NET dll がデフォルトの AppDomain にロードされることです。.NET dll は、ASP.NET アプリ ドメインにロードされた dll のように、ASP.NET、web.configs、現在の IIS 要求などを認識しません。実際に実行中のexeによって単純にロードされたかのようです。

dll がアクセスできる構成情報は、w3wp.exe の構成ファイルになります。したがって、dll でこの構成情報を取得する 1 つの方法 (実際にはこのアプローチをお勧めしません) は、フォルダーにw3wp.exe.configファイルを追加することです。windows\system32\inetsrvもちろん、これは恐ろしいことであり、行うべきではありません。

私が実際に行うことは、さまざまな構成設定を表すいくつかのプロパティを公開することを仕事とする COM 可視クラスを作成することです。プロパティ セッターは、dll の静的空間に値を割り当てます。次に、ASP アプリの Global.asa ファイルの Application start イベントに、このオブジェクトをインスタンス化して構成値を割り当てるコードを追加します。

dll は、上記のコードによって設定された静的な値を内部的に参照します。

同じアプリ プールで実行されるすべての ASP アプリケーションは、同じアプリ ドメインを共有するため、同一の構成が必要になることに注意してください。これは、同じマシン上のすべての ASP アプリケーションが共通の構成を共有することになる他のアプローチよりも優れています。

于 2012-08-08T19:59:37.293 に答える