WCFよりもコンポーネントを開発するためにCOMを使用する場合に得られる大きな利点は何ですか?WCFではなくCOMでできることはありますか?
6 に答える
いいえ、まだ死んでいませんが、死の床にあります、それは確かです。COMを使用/必要とする多くのレガシーシステムがまだ存在していることがわかります。これにより、COMはあと数年は使用できますが、長期的には使用できなくなります。
WCFに関しては、COMで実行できるものとできないもののいくつかのエッジケースがあるかもしれませんが、さらに重要なことに、レガシーのものに関連して、Windowsスタックに配置できるほぼすべての言語にCOMバインディングがあるということです。ただし、WCFバインディングはまだすべての人(言語)に対して準備ができていません
システムをどれだけ深く掘り下げたいかによって異なります。アンマネージ言語が死ぬことはないのと同じように、COM は決して死ぬことはありません。
簡単に言うと、Vista+ 用のデスクトップ アプリケーションを開発する場合、おそらく COM をわざわざ使用する必要はなくなるでしょう。
COMが死んだとは思わない。Vista を見ると、COM アーキテクチャ/テクノロジが非常に多く使用されています。Vista のすべてのものは COM Dll/Exe です。Vista は XP に比べて COM を多用しているように感じます。
Vista で何かを拡張したい場合は、COM を使用してインターフェイスを実装する必要があります。
いくつかの異なる側面があります。
- 複数のコンピューターで実行され、複数のコンピューターとやり取りするコンポーネント (サービスとして)
- ローカルでのみ実行され、ABI を介して複数のベンダーによって実装されたコンポーネントと対話するコンポーネント。
- サードパーティのコンポーネントとやり取りする必要のない、単一のベンダーによって作成されたコンポーネント。
- 単一のアプリケーションにコンパイルできる、ソース コードで利用可能な複数のベンダーのコンポーネント。
(ABI = アプリケーション バイナリ インターフェイス。COM は ABI の例です。)
側面 1 については、COM はほとんど死んでいます。
アスペクト 2 には引き続き COM が必要であり、今後も引き続き必要です。Windows Imaging Component は、新しいイメージ コーデックを誰でも実装できるようにする拡張性の好例です。.Net は、この点で有力な候補です。
側面 3 については、COM を検討する価値はありますが、これは各ソフトウェア ベンダーごとに決定する必要があります。社内向けのコンポーネント開発者が製品として販売される日が来るかもしれません。ここでも .Net が適しているようです。
側面 4 については、多くのオープンソース プロジェクトのソース コードを単純に適合させて組み合わせることができます。COM や ABI は必要ありません。
残念ながら、アンマネージ ABI としての COM は、コードとデータが同じメモリ空間にあり、スタックがデータと実行コール スタックの両方に使用されるため、バグから防御するのが困難です。1 つの COM コンポーネントの悪用可能な穴を利用して、同じアドレス空間にロードされた他の COM コンポーネントを不安定にすることができます。
私が間違っていなければ、.NET は COM や WFC などの技術を置き換えることを意図しています。.NET よりも COM または WFC を選択する理由 (レガシ コード以外) はありますか?
COM は死んでいます。COM は長生きします。
Windows 8 は興味深い曲線をたどっています。
http://kennykerr.ca/2011/10/18/the-road-to-windows-8/
http://msdn.microsoft.com/en-us/library/windows/apps/hh699871.aspx