0

まず、インターネットを 2 時間以上調べましたが、問題に対する有用な答えが見つかりませんでした。非常に単純です。Remoting と Form を使用してサーバー内のファイルを一覧表示する必要があるクライアント サーバー プログラムがあります (WCF については知っていますが、ここでのポイントではありません)。さて、私はすべてのリストディレクトリ/フォルダーが正常に機能しています (自分の PC でリモートを使用せずにテストしています) が、これを「リモート」しようとすると、苦労しています。

まず第一に、http をチャネルとして使用しており、登録と有効化は問題ありません。少なくとも私が使用していると思います:

RemotingServices.Marshal(Server,"ListaArquivos")

サーバーと

server = (Server)Activator.GetObject(typeof(ServerDLL.Server), "http://localhost:12345/ListaArquivos")

クライアントで、Server は .dll (MarshalByRefObject) です。

私の手順は次のとおりです。

  1. クライアントからサーバーへの手順で呼び出すすべてのメソッドを保持する .dll クラス (MarshalByRefObject を継承) があります。このメソッドの 1 つは TreeNodeCollection を返し、...
  2. クライアント フォームでこのメソッドを呼び出し、このコレクションをフォームに挿入しようとしましたが、そのときに "Windows.Form.TreeNodeCollection" blabla "not serializable" を取得しました。

そして、それは私の疑問です。どうすればこれを機能させることができますか? PS-> 私のプロジェクト リンク: My Explorer

4

2 に答える 2

1

このプロジェクトをご覧になることをお勧めします: http://www.codeproject.com/Articles/24508/How-to-Serialize-a-TreeNode-Object

基本的に、任意のクラスのラッパーを作成し、[Serializable]属性を追加することでシリアライズ可能にすることができます

[Serializable]
public class MyClass : InheritedClass
{//Your code}
于 2012-06-08T03:07:14.337 に答える
1

アーカイブのリストだけが必要な場合は、ファイルのリストのみを、おそらく文字列配列として送信する必要があります。そのリストからTreeNodeCollectionクライアント側で構築する必要があります。

単純な文字列配列よりも多くの情報を送信する必要がある場合 (つまり、ツリー構造が必要な場合)、情報を送信するための単純なデータ型を定義します。

[Serializable]
class Node
{
    public string Name;
    public Node[] Children;
}
于 2012-06-08T06:19:46.613 に答える