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 Console.WriteLine("test-ok");