(サーバ側に実体のある)メソッドを呼び出すため、サーバオブジェクトが提供するオブジェクトリファレンスを取得する。ここで重要なのはクライアント側にはサーバオブジェクトの実体がないという点にある。そのためクライアント側は呼び出すオブジェクトの実体に替わる何かがなければならない。その元になるのがオブジェクトリファレンスで、そのために取得したオブジェクトリファレンスを目的となるサーバオブジェクトの型へとダウンキャストし(これをナローイングという)、実際のオブジェクトの代わりを務めるプロキシ(代理)オブジェクトを生成している。すると、これによってサーバオブジェクト(の代理)ができるので、後はそのオブジェクトから普段と同じようにメソッドを呼び出すだけでリクエストの発行を行うことができる。行ってくれるので開発者はメソッドを呼び出すコードさえ記述すればよい。要求されたサーバ実装と更にその中の実行すべきメソッドの特定を行って(これをディスパッチという)データ(引数)を渡す。することでメソッドの実体での処理が実行される。クライアント側)実行されたメソッドが結果(戻り値)を返したら、今度は逆の向きでそれをリプライメッセージとしてクライアント側に返す。この結果、実際にはリモートメソッドの呼び出しであっても、(呼び元にとっては)あたかもローカルメソッドが呼び出されたかのように関数が実行され戻り値も返される。呼び出し自体は同期(リターンのあるまで後続処理を遅延する)/非同期(呼び出し後にそのまま自分の処理を継続する)を問わない。例外として送出されるしかけになっている。そのものが用意する標準例外とユーザの定義するユーザ定義例外とがあり、例えば取得したオブジェクトリファレンスが正しくない場合やクライアントが必要とするサーバオブジェクトを発見できない場合などで例外が上げられる。メソッド呼び出しを大別すると、あらかじめ呼び出すサーバオブジェクトが決定している静的起動と実行時に必要なサーバオブジェクトを探す動的起動とがある。両者はそれぞれ処理のための必要な手続きが異なるが、通常用いられるのは静的起動なので、ここでは静的起動での場合を説明した。動作の様子を見てみることにする。このアプリケーションは前節で解説したソース概要に忠実かつ極めてシンプルな構成のものである。譲るとして、ここではとにかく実行してみることにする。