トップ回答者
リモート通信でのオブジェクトの受け渡しについて

質問
-
リモート通信(TcpCannel)を使用してコンピュータ間の処理を実行しようとしています。
リモート処理自体には問題がないのですが、メソッドを実行する場合に、パラメータに
オブジェクトを指定したいのですがうまくいきません。
シリアライズを指定すれば良いようなのですがよく分かりません。
作成したクラスに指定してみたのですがうまくいきませんでした。
[seriarize]
class test
{
...
}
test t = new test();
cannel.Method(t);
のようにリモートのメソッドに自分で作成したクラスを指定したいのです。
このようなことは可能なのでしょうか?
だれか詳しい方がいましたら教えてください。
よろしくお願いします。
回答
-
外池と申します。まず、リモート通信そのものは、あるアプリケーションが公開しているオブジェクトを、他のアプリケーション(他のPCで走っていてもいいし、同じPCで走っていても良い)から利用する、というもので、これは、できているんですよね?
以下、本題ですが、
あるアプリケーションに存在しているオブジェクト(クラスのインスタンス)を、何らかの形で「梱包」して、他のアプリケーションに持っていって、そこで使うということ、この方法がよくわからない、というご質問だと思います。
可能です。
- リモート通信を媒介にして、オブジェクトを格納する変数を使って、他のアプリケーションに送ってもよし、
-
もっと低レベルな、ネットワークストリームを使って、他のアプリケーションに送るもよし、
-
リムーバブルな記録メディアにストリームとして記録して、オフラインで送って、他のアプリケーションに渡してもよし、
-
オブジェクトを用意したアプリケーション自身が、オブジェクトを一度保管してシャットダウンし、再起動後にオブジェクトを読み出すのもよし、
すべて、仰るとおりの「シリアライズ」という概念で、オブジェクト(クラスのインスタンス)を「梱包」することになります。シリアライズ自体は、すこし調べればすぐに出来るようになりますが、
ひとつ注意点を。
渡す先の他のアプリケーションも、そのオブジェクトのクラスを知っていなければなりません。(あるいは、最低限、インターフェイスを知っていなければなりません。) ですので、双方のアプリで、共通のクラスのソースプログラムか、共通のインターフェイスのソースプログラムを用意して、コンパイルする必要があります。
すべての返信
-
外池と申します。まず、リモート通信そのものは、あるアプリケーションが公開しているオブジェクトを、他のアプリケーション(他のPCで走っていてもいいし、同じPCで走っていても良い)から利用する、というもので、これは、できているんですよね?
以下、本題ですが、
あるアプリケーションに存在しているオブジェクト(クラスのインスタンス)を、何らかの形で「梱包」して、他のアプリケーションに持っていって、そこで使うということ、この方法がよくわからない、というご質問だと思います。
可能です。
- リモート通信を媒介にして、オブジェクトを格納する変数を使って、他のアプリケーションに送ってもよし、
-
もっと低レベルな、ネットワークストリームを使って、他のアプリケーションに送るもよし、
-
リムーバブルな記録メディアにストリームとして記録して、オフラインで送って、他のアプリケーションに渡してもよし、
-
オブジェクトを用意したアプリケーション自身が、オブジェクトを一度保管してシャットダウンし、再起動後にオブジェクトを読み出すのもよし、
すべて、仰るとおりの「シリアライズ」という概念で、オブジェクト(クラスのインスタンス)を「梱包」することになります。シリアライズ自体は、すこし調べればすぐに出来るようになりますが、
ひとつ注意点を。
渡す先の他のアプリケーションも、そのオブジェクトのクラスを知っていなければなりません。(あるいは、最低限、インターフェイスを知っていなければなりません。) ですので、双方のアプリで、共通のクラスのソースプログラムか、共通のインターフェイスのソースプログラムを用意して、コンパイルする必要があります。
-
こんにちは。中川俊輔 です。
外池さん、indigo-xさん、回答ありがとうございます。
としぼ@jfe-techさん、フォーラムのご利用ありがとうございます。
有用な情報と思われたため、勝手ながら外池さん、indigo-xさんの回答へ回答済みチェックをつけさせていただきました。
回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。としぼ@jfe-techさんはチェックを解除することもできますので、ご確認ください。
それでは!