Можно ли использовать RealProxy для предоставления интерфейсов классов через Remoting без MarshalByRefObject? - PullRequest
0 голосов
/ 08 декабря 2011

Можно ли сделать RealProxy, который выглядит следующим образом:

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

и может выставить все эти interfaces через удаленное взаимодействие, делегируя вызовы instance, даже если экземпляр неa 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 Ответ

3 голосов
/ 11 октября 2012

Просто пусть ваш класс реализует IRemotingTypeInfo .

псевдокод выглядит так:

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

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