C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: .NetRemotingでのリモートオブジェクトについて


(過去ログ 42 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■21797 / inTopicNo.1)  .NetRemotingでのリモートオブジェクトについて
  
□投稿者/ Rinda (1回)-(2008/07/10(Thu) 03:37:59)

分類:[C#] 

開発環境 : Visual Studio 2005
言語 : C#

はじめまして、Rindaと申します。
.NetRemotingでのリモートオブジェクトについて質問させて下さい。

Dictionary<Tkey,Tvalue> や List<T> 等のコレクションクラスを継承した
自作(って言っていいのやら)のコレクションクラスをリモートオブジェクト
として登録したいと思っています。

しかしC#ではクラスの多重継承ができないので、上記のコレクションクラスを
継承してしまうと「MarshalByRefObject」が継承できなくなってしまいますよね。

Dictionary<Tkey,Tvalue> や List<T>等を継承したクラスはリモートオブジェクト
として登録できないのでしょうか。

以上、よろしくお願いします┌○

引用返信 編集キー/
■21801 / inTopicNo.2)  Re[1]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ なちゃ (142回)-(2008/07/10(Thu) 08:42:14)
無理です。
せいぜいコレクションを内部に保持して、外部からのアクセス用メソッドなどから委譲するくらいです。

まあどうするのが良いのかはどんな使い方をしようとしてるかにもよりますが…

引用返信 編集キー/
■21805 / inTopicNo.3)  Re[1]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ シャノン (529回)-(2008/07/10(Thu) 09:46:16)
No21797 (Rinda さん) に返信
> しかしC#ではクラスの多重継承ができないので、上記のコレクションクラスを
> 継承してしまうと「MarshalByRefObject」が継承できなくなってしまいますよね。
>
> Dictionary<Tkey,Tvalue> や List<T>等を継承したクラスはリモートオブジェクト
> として登録できないのでしょうか。

IDictionary<TKey, TValue> や IList<T> を実装することになりますかね。
引用返信 編集キー/
■21806 / inTopicNo.4)  Re[2]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ Rinda (2回)-(2008/07/10(Thu) 09:53:09)
No21801 (なちゃ さん) に返信
> 無理です。
> せいぜいコレクションを内部に保持して、外部からのアクセス用メソッドなどから委譲するくらいです。

ですよね・・・。
その方法で実装することを検討してみます。

>
> まあどうするのが良いのかはどんな使い方をしようとしてるかにもよりますが…
>

コレクションほぼそのままなんですが、ToString()をoverrideして決まった書式で返したりとか
独自のプロパティ等を追加したりと、あまりたいしたことはしてないんですが、それだけに元から
実装しなおすのはちょっと面倒だなと思ったまでです。

また質問させて頂く事もあるかと思いますが、今後ともよろしくお願いします。



解決済み
引用返信 編集キー/
■21807 / inTopicNo.5)  Re[2]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ なちゃ (143回)-(2008/07/10(Thu) 09:56:15)
No21805 (シャノン さん) に返信
> IDictionary<TKey, TValue> や IList<T> を実装することになりますかね。

これもなかなか微妙で、多分どこかで失敗します。

なのでせいぜいインデクサなど必要最小限の機能を提供するくらいが現実的ですね…

引用返信 編集キー/
■21809 / inTopicNo.6)  Re[3]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ なちゃ (144回)-(2008/07/10(Thu) 10:07:43)
コレクションほとんどそのままとのことですが、どのような使い方を想定しているかが問題です。
リモーティングが、他マシンからというレベルなのか、
どの程度頻繁にアクセスするのか、
複数同時アクセスがあるのか、
Enumeratorでのアクセスまで想定しているのか、
ぶっちゃけ普通のコレクションのつもりで使うつもりなのか…

へたな使い方をすると簡単に破綻します。

解決済み
引用返信 編集キー/
■21810 / inTopicNo.7)  Re[3]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ Rinda (3回)-(2008/07/10(Thu) 10:13:37)
シャノンさん、なちゃさん、アドバイスありがとうございます。

■No21807 (なちゃ さん) に返信
> ■No21805 (シャノン さん) に返信
>>IDictionary<TKey, TValue> や IList<T> を実装することになりますかね。
> 
> これもなかなか微妙で、多分どこかで失敗します。

どこかで失敗するとはどういう意味でしょうか。

    public class CustomDictionary : MarshalByRefObject, IDictionary<String, CustomValueList>
    {
        private Dictionary<String, CustomValueList> m_dictionary = new Dictionary<string, CustomValueList>();

        public CustomDictionary() { m_dictionary = new Dictionary<string, CustomValueList>(); }
        public void Add(String key, CustomValueList value) { m_dictionary.Add(key, value); }
        ...
        ...
    }

とかってやってったら何か問題でますでしょうか。

引用返信 編集キー/
■21812 / inTopicNo.8)  Re[4]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ Rinda (4回)-(2008/07/10(Thu) 10:19:36)
おぉ、なんか早くて若干ついていけてませんがすいません。

No21809 (なちゃ さん) に返信
> コレクションほとんどそのままとのことですが、どのような使い方を想定しているかが問題です。
> リモーティングが、他マシンからというレベルなのか、
> どの程度頻繁にアクセスするのか、
> 複数同時アクセスがあるのか、
> Enumeratorでのアクセスまで想定しているのか、
> ぶっちゃけ普通のコレクションのつもりで使うつもりなのか…
>
> へたな使い方をすると簡単に破綻します。
>

リモーティングは他マシンからです。TCPでいこうと思っています。
限られたユーザが対話式にアクセスすることを想定してますので、頻繁ではないと思います。
複数同時アクセスは考えられます。リモートオブジェクトはSingleCallでいこうと思っています。
普通のコレクションのように使おうと思ってますので、当然Enumeratorでのアクセスも考えてます。

なんかあやふやな回答になってしまいすいません。
引用返信 編集キー/
■21814 / inTopicNo.9)  Re[5]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ なちゃ (145回)-(2008/07/10(Thu) 11:05:33)
SingleCallだとそのままでは目的が果たせないことはわかりますか?

複数から使うようですが、対象のコレクションは全クライアントで共有の想定ですか?
それとも、各クライアントそれぞれ専用のコレクションがあるイメージですか?

引用返信 編集キー/
■21817 / inTopicNo.10)  Re[6]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ Rinda (5回)-(2008/07/10(Thu) 11:30:47)
No21814 (なちゃ さん) に返信
> SingleCallだとそのままでは目的が果たせないことはわかりますか?

すいません、SingleCallを勘違いしていました。メソッドが呼ばれる度に
インスタンスが生成されてしまうのですね。それだとコレクションの役割を
果たせてないのでSingletonにしようと思います。

> 複数から使うようですが、対象のコレクションは全クライアントで共有の想定ですか?
> それとも、各クライアントそれぞれ専用のコレクションがあるイメージですか?

対象のコレクションは各クライアントそれぞれ専用のコレクションを
保持する形をとりたいです。
引用返信 編集キー/
■21822 / inTopicNo.11)  Re[7]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ なちゃ (146回)-(2008/07/10(Thu) 12:45:04)
Singletonだと全体で1つですのでクライアントそれぞれで個別にはできません。
CAOにするか、SingletonやSingleCallで対象コレクションを作成して返すメソッドを用意するなどが必要です。
また有効期限管理も必要です。

もし列挙子をサポートするなら、それをどう実装するかも検討が必要です。
列挙子はMarshalByRefObjectにするのか他のやり方にするのかなど。

引用返信 編集キー/
■21848 / inTopicNo.12)  Re[8]: .NetRemotingでのリモートオブジェクトについて
□投稿者/ Rinda (6回)-(2008/07/10(Thu) 23:06:02)
No21822 (なちゃ さん) に返信
> Singletonだと全体で1つですのでクライアントそれぞれで個別にはできません。
> CAOにするか、SingletonやSingleCallで対象コレクションを作成して返すメソッドを用意するなどが必要です。
> また有効期限管理も必要です。
>
> もし列挙子をサポートするなら、それをどう実装するかも検討が必要です。
> 列挙子はMarshalByRefObjectにするのか他のやり方にするのかなど。
>

その辺を詳しく調べてみます。
アドバイスありがとうございます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -