- PR -

[C#]Activator.GetObject()で取得するプロキシについて

1
投稿者投稿内容
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-11 21:52
いつもお世話になっております。
件名の通り、Activator.GetObjectで取得するプロキシについて
質問させていただきます。

サーバーオブジェクトが持つリモートオブジェクトを
異なる2つのアプリで共有しようとしています。
そのリモートオブジェクトのプロキシを取得するにあたり
共有するということで、サーバーオブジェクトのRemotingConfiguration.Configureに
指定するconfigファイル内での設定は

<application>
  <service>
    <wellknown mode="Singleton" type ...(省略) />
  </service>
  <channels>
    <channel ref="ipc" portName="test" />
  </channels>
</application>

としています。
一応各アプリの Activator.GetObject で取得したプロキシは
同じリモートオブジェクトのインスタンスのプロキシができているのでいいのですが
もし、同じ型のリモートオブジェクトの別インスタンスのプロキシを取得したい場合は
どのようにすればいいのかわからず悩んでいます。

ちなみに、サーバーオブジェクトとクライアントアプリ2つは
同プロセスの別ドメイン(別スレッド)で起動させています。

ご教授よろしくお願いします。

[開発環境]
WindowsXP
Visual Studio .NET2005




なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-04-11 23:38
引用:

まかろにさんの書き込み (2006-04-11 21:52) より:
一応各アプリの Activator.GetObject で取得したプロキシは
同じリモートオブジェクトのインスタンスのプロキシができているのでいいのですが
もし、同じ型のリモートオブジェクトの別インスタンスのプロキシを取得したい場合は
どのようにすればいいのかわからず悩んでいます。


リモーティングの機構によるインスタンスの管理ではそういうことはできないので、
例えばキーを指定してインスタンスを作成して返すようなリモートメソッドを作成し、
リモートで呼び出してプロキシを取得するなどの間接的なやり方が必要になると思います。

まあ、オブジェクト自体をプロキシで参照するよりは、サーバ側でキーで状態を
保持するほうが無難にも思いますが。

ところで、
引用:

ちなみに、サーバーオブジェクトとクライアントアプリ2つは
同プロセスの別ドメイン(別スレッド)で起動させています。


この別スレッドでってどういう意味ですか?
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-04-12 02:40
引用:

なちゃさんの書き込み (2006-04-11 23:38) より:

リモーティングの機構によるインスタンスの管理ではそういうことはできないので、
例えばキーを指定してインスタンスを作成して返すようなリモートメソッドを作成し、
リモートで呼び出してプロキシを取得するなどの間接的なやり方が必要になると思います。

まあ、オブジェクト自体をプロキシで参照するよりは、サーバ側でキーで状態を
保持するほうが無難にも思いますが。



なるほど、ルール違反というわけですね。
例えば、なちゃさんの言われるように、共有かつ複数作成したい
インスタンス( Aとします )をコレクションとして抱えるクラスを
リモートオブジェクトとして、キーを指定してAを返すみたいなメソッドを
実装した場合に、AがMarshalByRefObject から派生しているクラスなら
そのままAのプロキシをクライアント側が受け取れたりするんでしょうか?
(理解しづらい文章ですいません・・・)

でも、リモートメソッドっていう単語からどうも外してる気がする・・・

引用:

この別スレッドでってどういう意味ですか?



これはですね、クライアントアプリを起動した時に
プログラム内で、サーバーオブジェクトの起動ともう1コのクライアントアプリの
起動をしてるんですけど、そのままドメインを作って起動させたら
同スレッドで動いてメッセージループから返ってこないので
それぞれスレッドを作って、ドメインを作って、起動という風にしてるわけです。
1

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