インプロセス,アウトオブプロセス,およびリモートサーバー
COM の基礎:インデックス への移動
COM の場合,クライアントはオブジェクトが存在する場所を知る必要がなく,オブジェクトのインターフェースを呼び出すだけです。呼び出しのために必要な手順は COM が実行します。これらの手順は,オブジェクトがクライアントと同じプロセスの中にあるか,クライアントマシン上の別のプロセスの中にあるか,それともネットワーク上の別のマシン上にあるかによって異なります。サーバーには以下の種類があります。
インプロセスサーバー |
クライアントと同じプロセス空間で実行中のライブラリ(DLL)。たとえば,Internet Explorer または Netscape で表示されている Web ページに埋め込まれた ActiveX コントロールがこれに当たる。つまり,ActiveX コントロールはクライアントマシンにダウンロードされ,Web ブラウザと同じプロセスの中で呼び出される クライアントは,COM インターフェースへの直接呼び出しを使ってインプロセスサーバーと通信する |
アウトオブプロセスサーバー(ローカルサーバー) |
クライアントと同じマシンの別のプロセス空間で動作している別のアプリケーション(EXE)。たとえば,Word 文書の中に埋め込まれた Excel スプレッドシートがこれに当たる。Word と Excel は同じマシン上で動作している 2 つの別個のアプリケーション ローカルサーバーは,COM を使ってクライアントと通信する |
リモートサーバー |
クライアントとは別のマシンで動作している DLL または別のアプリケーション。たとえば,ネットワーク上の別のマシン上のアプリケーションサーバーに接続している Delphi データベースアプリケーションがこれに当たる リモートサーバーは分散 COM(DCOM)を使ってインターフェースにアクセスし,アプリケーションサーバーと通信する |
インプロセスサーバーの場合は,次の図に示したように,オブジェクトインターフェースへのポインタがクライアントと同じプロセス空間にあるので,COM はオブジェクトの実装に対して直接呼び出しを実行します。
メモ: これは COM+ では必ずしも当てはまりません。異なるコンテキストにおけるオブジェクトへの呼び出しをクライアントが行うと,COM+ はこの呼び出しをインターセプトすることによって,サーバーがインプロセスサーバーであっても,アウトオブプロセスサーバー(後述)への呼び出しのように動作するようにします。
プロセスが別のプロセスか別のマシンにある場合,COM は下の図に示すように,プロキシを使ってリモート手続きを呼び出します。プロキシは,クライアントと同じプロセスの中にあるので,クライアントの観点からはすべてのインターフェース呼び出しが同じように見えます。プロキシは,クライアントの呼び出しをインターセプトして,実際のオブジェクトが動作している場所へ転送します。クライアントが,別のプロセス空間内または別のマシン上にあるオブジェクトに,それが自分のプロセス内に存在するかのようにアクセスすることを可能にする機構をマーシャリングと呼びます。
アウトオブプロセスサーバーとリモートサーバーの違いは,使用されるプロセス間通信の種類にあります。プロキシは COM を使ってアウトオブプロセスサーバーと通信し,分散 COM(DCOM)を使ってリモートマシンと通信します。DCOM は,別のマシン上で動作しているリモートオブジェクトに,ローカルオブジェクト要求を透過的に転送します。
メモ: リモート手続き呼び出しについては,DCOM はオープングループの分散コンピューティング環境(DCE)が提供している RPC プロトコルを使用します。分散セキュリティについては,DCOM は NTLM(NT Lan Manager)セキュリティプロトコルを使用します。ディレクトリサービスについては,ドメインネームシステム(DNS)を使用します。