理解できない小さな問題が発生しました。クライアント側で透過プロキシをラップしようとしているサーバー側のMarshalByRefObjectがあります。設定は次のとおりです。
public class ClientProgram {
public static void Main( string[] args ) {
ITest test = (ITest)Activator.GetObject( typeof( ITest ), "http://127.0.0.1:8765/Test.rem" );
test = (ITest)new MyProxy( test ).GetTransparentProxy();
test.Foo();
}
}
public class MyProxy : RealProxy {
private MarshalByRefObject _object;
public MyProxy( ITest pInstance )
: base( pInstance.GetType() ) {
_object = (MarshalByRefObject)pInstance;
}
public override IMessage Invoke( IMessage msg ) {
return RemotingServices.ExecuteMessage( _object, (IMethodCallMessage)msg );
}
}
問題は、RemotingServices.ExecuteMethodを呼び出すと、「ExecuteMessageはオブジェクトのネイティブコンテキストからのみ呼び出すことができます」というメッセージとともに例外がスローされることです。これを正しく機能させる方法を誰かが指摘できますか?リモートオブジェクトのメソッド呼び出しの前後にコードを挿入する必要があります。乾杯!