2011-01-05 9 views
0

ServicedComponentを継承し、IISのWebアプリケーションからサイドバイサイドアセンブリとして使用しようとしている.Net COM +コンポーネントが管理されていますWindows Server 2003上の6.0。IIS6.0で管理された.Net COM +サービスの実行

mt.exeを使用してアセンブリマニフェストを生成し、これをテストコンソールアプリケーションでサイドバイサイドモードで正常に実行しました。しかし、IISに関しては、動作していないようで、マニフェストを読むのではなく、レジストリからCOM +アプリケーションを見つけようとします。

マニフェストは、 mt.exe -managedassemblyname:myassembly.dll -out:myassembly.manifestを使用して生成され、Webアプリケーションの仮想ディレクトリにコピーされます。 filemonを使用すると、マニフェストは決して読み込まれません!

ファイルをbinディレクトリに移動すると、読み込まれているようですが、同じ問題が発生します。

この作業に成功した人からの助けをいただければ幸いです。

答えて

0

".manifest"で終わる外部マニフェストは、実行可能ファイルに対してのみ自動的に選択されます。 IISやWindowsにあなたのマニフェストを伝える必要があります。誰もそれを読まなくてはなりません。

コンソールアプリケーションのテストでは、実行可能ファイルのマニフェストにMyAssemblyの参照が含まれているか、直接関連情報が含まれている可能性があります。

ここでは、私はServicedComponentをよく知らないので、一般的な言葉で話します。

  1. あなたはMyAssemblyを呼び出すソフトウェアのすべてを制御するために取得した場合、あなたは意図的に、マニフェスト最初に情報をロードしたスレッド上にその情報をアクティブに、MyAssemblyに呼び出し、および無効化することができます。これは親プロセスを汚染していないので、コードの実行中にコードが実行されているスレッドのみを構成しているため、この種のプラグインアーキテクチャを満たす最善の方法です。 このアプローチは、All-in One Code Framework
  2. にバンドルされたregフリーのCOMサンプルでいくつかの優れた例を見つけることができるアクティベーションコンテキストAPIの呼び出しによって実行されます。MyAssemblyを呼び出すコードをすべて制御できない場合IISによって自動的に呼び出されている場合)、あまりにも多くの場所で呼び出されており、上記で提案されたアプローチがコストがかかりすぎる場合は、ここで常に「ハックアラウンド」を試みることができます。 IIS6.0ワーカープロセスの実行可能ファイルを取り出し、そのマニフェストがある場合は編集します。マニフェストがない場合は新しいマニフェストを追加します(マニフェストが埋め込まれているかどうかを確認してください)。MyAssemblyに依存します。このアプローチでは、MyAssemblyのマニフェストコンテンツは、基本的にIIS6内で実行されるすべてのコードの実行コンテキストの一部となるため、かなり重いアプローチです。
+0

総合情報をありがとう。もう一度並んで見ると、私はそれを試してみるでしょう。 – Alex

関連する問題