读书人

在Remoting中怎么使用接口,恳求高人指

发布时间: 2011-12-11 23:19:43 作者: rapoo

在Remoting中如何使用接口,恳求高人指点
为了不在客户端放置通用库文件,先定义接口,让通用库继承接口,然后在客户端只使用接口.问题是:在客户端使用通用库时
ClientActivatedType CAObject = new ClientActivatedType();
ILease serverLease = (ILease)RemotingServices.GetLifetimeService(CAObject);
MyClientSponsor sponsor = new MyClientSponsor();
serverLease.Register(sponsor);
是可以通过的,客户端发起租约成功.但,当只引用接口时:
IcskGeneral CAObject ;
CAObject=(IcskGeneral)Activiter.GetObject(TypeOf(IcskGeneral),url);
ILease serverLease = (ILease)RemotingServices.GetLifetimeService(CAObject);
报错:错误1 与“System.Runtime.Remoting.RemotingServices.GetLifetimeService(System.MarshalByRefObject)”最匹配的重载方法具有一些无效参数
错误2 参数“1”: 无法从“cdling.IcskGeneral”转换为 system.MarshalByRefObject”

报错时光标在GetLifetimeService(CAObject)的CAObject 上.

在任炅的讲座中只提到过,但在示例中都是引用的通用库,请问大师门如何解决,因为我不想把通用库放到客户端去!


[解决办法]
试一试:

IcskGeneral CAObject ;
CAObject=(IcskGeneral)Activiter.GetObject(TypeOf(IcskGeneral),url);

//强行转换一下
System.MarshalByRefObject tmp = (System.MarshalByRefObject)CAObject;

ILease serverLease = (ILease)RemotingServices.GetLifetimeService(tmp);

[解决办法]
RemotingServices.GetLifetimeService(CAObject);

把GetLifetimeService的参数改成IcskGeneral接口

要搞清楚继承关系ClientActivatedType 能够转化为IcskGeneral
但是IcskGeneral接口不能转换为ClientActivatedType
[解决办法]
ClientActivatedType CAObject = new ClientActivatedType();
这里错了.
若要在客户端使用接口,就必须是服务端激活模式.否则客户端怎么知道构造函数的签名呢?!

读书人网 >C#

热点推荐