2011-12-08 53 views
0

是否有可能使一個RealProxy,看起來像這樣:是否可以使用RealProxy通過Remoting公開類接口而不使用MarshalByRefObject?

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) 

回答

3

只要有你的類實現IRemotingTypeInfo

僞代碼如下所示:

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

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