在网上找到许多关于remoting创建简单对象的帖子,但是不是我想要的。
想要的是当远程对象中有若干个集合类相互嵌套之后这样的远程对象要怎么创建。
我想要的情景之一:
public class TestRemoteObject:MarshalByRefObject
{
private string _name;
private double _age;
private Hashtable _table;
private IList _list;
private TestPerson _person;
/*get() set() ToString() 略。。。 构造略。。。*/
}
[Serializable]
class TestPerson{
private Hashtable _table;
private IList _list;
private Queue _queue;
/*
get() set() ToString() 构造 略。。。。
*/
}
服务器端采用RegisterActivatedServiceType()方式。 在客户端创建此远程对象时如果将TestPerson类中的各个集合类实例化并赋值之后,远程对象无法创建。
各位大神,如有创建远程复杂对象的资料链接也可。非常感谢。。。
你把业务对象作为远程对象非常不智,假设你的TestRemoteObject 下有1w个TestPerson,那么服务器端和客户端都会创建相同TestRemoteObject,如果假设Actived方式是客户端释放,如果客户端不释放该对象,服务器这个对象也会一直存在,如果有N个客户端,服务器就很容易挂。
一般的RemotingObject都应该是Factory,如PersonalFactory,里面提供GetTestPersonal(searchcondition), 然后返回 TestPersonal列表对象,那么服务器只有Factory的对象,而TestPersonal只是作为数据传输到客户端。这样服务器压力就会小很多,因为TestPersonal对象只是暂时出现在服务器,传输完毕就释放掉。因此代码要变为
[Serializable]
public class TestRemoteObject //沿用你的类名,
然后
public class TestRemoteObjectFactory:MarshalByRefObject
里面提供一个方法
TestRemoteObject GetTestRemoteObject()