2 using System
.Threading
;
3 using System
.Runtime
.InteropServices
;
4 using System
.Runtime
.Remoting
;
5 using System
.Runtime
.Remoting
.Messaging
;
6 using System
.Runtime
.Remoting
.Proxies
;
7 using System
.Runtime
.Remoting
.Channels
;
8 using System
.Runtime
.Serialization
;
10 namespace RemotingTest
12 class MyProxy
: RealProxy
14 readonly MarshalByRefObject target
;
16 public MyProxy (MarshalByRefObject target
) : base (target
.GetType())
21 public override IMessage
Invoke (IMessage request
)
23 IMethodCallMessage call
= (IMethodCallMessage
)request
;
24 Console
.WriteLine ("Invoke " + call
.MethodName
);
26 Console
.Write ("ARGS(");
27 for (int i
= 0; i
< call
.ArgCount
; i
++)
31 Console
.Write (call
.GetArgName (i
) + " " +
34 Console
.WriteLine (")");
35 Console
.Write ("INARGS(");
36 for (int i
= 0; i
< call
.InArgCount
; i
++)
40 Console
.Write (call
.GetInArgName (i
) + " " +
43 Console
.WriteLine (")");
45 IMethodReturnMessage res
= RemotingServices
.ExecuteMessage (target
, call
);
47 Console
.Write ("RESARGS(");
48 for (int i
= 0; i
< res
.ArgCount
; i
++)
52 Console
.Write (res
.GetArgName (i
) + " " +
55 Console
.WriteLine (")");
57 Console
.Write ("RESOUTARGS(");
58 for (int i
= 0; i
< res
.OutArgCount
; i
++)
62 Console
.Write (res
.GetOutArgName (i
) + " " +
65 Console
.WriteLine (")");
81 Console
.WriteLine(sTest
);
103 interface GenericIFace
{
107 class R1
: MarshalByRefObject
, GenericIFace
109 public R2
TestMBV() {
113 public T Foo
<T
> () {
120 static int Main(string[] args
)
122 Console
.WriteLine("test " + AppDomain
.CurrentDomain
.FriendlyName
);
123 AppDomain app2
= AppDomain
.CreateDomain("2");
125 if (!RemotingServices
.IsTransparentProxy(app2
))
128 ObjectHandle o
= AppDomain
.CurrentDomain
.CreateInstance(typeof(R1
).Assembly
.FullName
, typeof(R1
).FullName
);
129 R1 myobj
= (R1
) o
.Unwrap();
131 // should not be a proxy in our domain..
132 if (RemotingServices
.IsTransparentProxy(myobj
))
134 Console
.WriteLine("CreateInstance return TP for in our current domain");
138 o
= app2
.CreateInstance(typeof(R1
).Assembly
.FullName
, typeof(R1
).FullName
);
140 Console
.WriteLine("type: " + o
.GetType().ToString());
142 myobj
= (R1
) o
.Unwrap();
143 if (!RemotingServices
.IsTransparentProxy(myobj
))
146 Console
.WriteLine("unwrapped type: " + myobj
.GetType().ToString());
149 bool bSerExc
= false;
154 r2
= myobj
.TestMBV();
156 catch (SerializationException
)
164 // Test generic virtual interface methods on proxies
166 o
= app2
.CreateInstance(typeof(R1
).Assembly
.FullName
, typeof(R1
).FullName
);
167 myobj
= (R1
) o
.Unwrap();
169 GenericIFace iface
= (GenericIFace
)myobj
;
170 if (iface
.Foo
<int> () != 0)
172 if (iface
.Foo
<string> () != null)
175 // Test type identity (#504886, comment #10 ff.)
177 if (typeof (R1
) != myobj
.GetType ())
180 AppDomain
.Unload (app2
);
182 Console
.WriteLine("test-ok");