- PR -

C#でクラスメソッドもシリアルライズできないの?

1
投稿者投稿内容
スーパーマン
会議室デビュー日: 2007/07/07
投稿数: 6
投稿日時: 2007-10-27 11:52
【やりたい事】
 クラスのインスタンスをシリアライズしてソケット通信でリモートに送りつけ、
 リモート側でデシリアライズしてそのクラスのメソッドを実行する

 具体的なイメージを示すと以下のようになります

 ・インターフェースクラス(IF_Class)を定義します
  インタフェースにはパブリックなメソッド(run)を定義します

 ・拠点AでのPC上でIF_Classを継承するクラス(IMP_Class)のインスタンスを生成します
  IMP_Classにはメソッド(run)としてHelloWorldを表示する機能を実装します

 ・拠点Aから拠点BへIMP_Classのインスタンスをシリアライズしたデータをソケット通信で送ります

 ・拠点Bではソケット通信で受信されたシリアライズされたデータをIF_Classを継承
  したクラスオブジェクトとしてデシリアライズしてインスタンスに復元します

 ・復元したインスタンスのメソッド(run)を呼び出してHelloWorldを表示させる


Javaではこのようなことが出来たと記憶してますが.NETの世界では無理なのでしょうか?
ネットで探してみても、XmlSerializer等、クラスのプロパティをシリアライス/デシリアライズする方法は
あってもメソッドを含めたシリアライズする方法を説明したような情報がありません。
どなたかご存知の方がおられましたらご教授ください。また、参考になるようはサイトがあればご照会ください

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-10-27 12:29
???
Javaには詳しくないのですが、モバイルエージェントのことでしょうか?

.NETの標準的なランタイムにはそのような仕組みは用意されていません。行いたければフレームワークを自作することになると思います。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-10-27 18:26
こんばんは。

引用:

スーパーマンさんの書き込み (2007-10-27 11:52) より:
Javaではこのようなことが出来たと記憶してますが.NETの世界では無理なのでしょうか?



スーパーマンさんのやりたいことは、
「ネットワーク上のPCへ実行可能なプログラムコードを送りつけて実行させたい」ってことですか?
(Javaアプレットのような)サンドボックスセキュリティモデルみたいのがないと怖いですね。

Javaでは出来るんですか?なんて技術でしょう?

リモートオブジェクトのメソッドを呼び出しすることくらいなら、
古くから分散アプリケーション技術(CORBAやDCOMなど)がありますし
Java(RMIやApache SOAP)でも.NET(.NET RemotingやWCF )でもできるでしょうけれども!?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-10-27 21:26
受け取り側がクラスの設計図を持っていたら、クラスのメソッドはインスタンスに依存しませんから、………って書いて、もしや、デリゲート先を知りた(実行したい)いってこと?
スーパーマン
会議室デビュー日: 2007/07/07
投稿数: 6
投稿日時: 2007-10-27 23:05
甕星さん、Tdnr_Symさん、Jittaさん、レスありがとうございます。

私がやりたいことは甕星さんが言われた通り「モバイルエージェント」そのものです。

甕星さん曰く「フレームワークを自作」するとすると稚拙ですがこんな感じで実現する
しかないのでしょうか....?

【インタフェース】
abstract public class Agent
{
 abstract public void run();
}

このクラスはローカル、リモート共に必要


【ローカル側の処理】
public class Class1 : Agent
{
 public override void run()
 {
  MessageBox.Show("Hello World!!", "私はエージェント");
}
}

モバイルエージェントとなるこのクラスをクラスライブラリ(ClassLibrary.dll)にした上で
dllのファイル自体をリモートに送る

【リモート側の処理】

ソケット通信等でClassLibrary.dllの実態を受け取り、一旦dllのファイルにしておく
以下のステップでDLLからモバイルエージェントとなるこのクラスを生成して実行する

  Agent obj = (Agent)GetInstance("ClassLibrary.dll", "Class1");
  obj.run();

しかし、これだとリモートでメソッド実行は出来たとしても
ローカルでインスタンス化したオブジェクトが持つメンバ変数がリモートでのオブジェクトには
復元できないですね....
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2007-10-28 18:16
Microsoft .NET Framework SDK チュートリアル
http://ja.gotdotnet.com/quickstart/howto/
のシリアル化
にサンプルがあります

インストールドキュメント(Visual Studio .NET 2003)
だと下記操作で表示されます
検索 Serialize サンプル
フィルタ条件 VisualC# ドキュメント

Javaでは下記クラスを使用します
java.io.ObjectInputStream
java.io.ObjectOutputStream
1

スキルアップ/キャリアアップ(JOB@IT)