0

好吧,首先,我已经在互联网上看了两个多小时,但我真的找不到任何有用的答案来解决我的问题。好吧,这很简单:我有一个客户端-服务器程序,我需要使用远程处理和表单列出服务器中的文件(我知道 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“不可序列化”的时候。

这是我的疑问,我怎样才能使这项工作?PS->我的项目链接:我的资源管理器

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 回答