是否可以使用RealProxy在没有MarshalByRefObject的情况下通过Remoting公开类接口?

时间:2011-12-08 04:26:21

标签: remoting

是否可以制作如下所示的RealProxy

public InterfaceProxy(object instance, params Type[] interfaces)

并且可以通过远程处理公开所有这些interfaces,将调用委派给instance,即使实例不是MarshalByRefObject

目前我遇到一个问题,代理收到InitializeLifetimeService的调用,无论我从中返回什么(包括null),我总是遇到以下异常:

System.InvalidCastException:Return argument has an invalid type
at System.Runtime.Remoting.Proxies.RealProxy.ValidateReturnArg(Object arg, Type paramType)
at System.Runtime.Remoting.Proxies.RealProxy.PropagateOutParameters(IMessage msg, Object[] outArgs, Object returnValue)
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnmessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

1 个答案:

答案 0 :(得分:3)

让您的班级实施IRemotingTypeInfo

伪代码看起来像:

class InterfaceProxy : RealProxy, IRemotingTypeInfo
{
    // snip all the basics

    bool IRemotingTypeInfo.CanCastTo(Type fromType, Object o)
    {
        return interfaces.Contains(fromType);
    }
}