2007-03-28 Chris Toshok <toshok@ximian.com>
[mono-project.git] / mono / tests / remoting4.cs
blobcdb93be4d2f425c4125d94579336641ab270ccde
1 using System;
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())
18 this.target = target;
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++)
29 if (i != 0)
30 Console.Write (", ");
31 Console.Write (call.GetArgName (i) + " " +
32 call.GetArg (i));
34 Console.WriteLine (")");
35 Console.Write ("INARGS(");
36 for (int i = 0; i < call.InArgCount; i++)
38 if (i != 0)
39 Console.Write (", ");
40 Console.Write (call.GetInArgName (i) + " " +
41 call.GetInArg (i));
43 Console.WriteLine (")");
45 IMethodReturnMessage res = RemotingServices.ExecuteMessage (target, call);
47 Console.Write ("RESARGS(");
48 for (int i = 0; i < res.ArgCount; i++)
50 if (i != 0)
51 Console.Write (", ");
52 Console.Write (res.GetArgName (i) + " " +
53 res.GetArg (i));
55 Console.WriteLine (")");
57 Console.Write ("RESOUTARGS(");
58 for (int i = 0; i < res.OutArgCount; i++)
60 if (i != 0)
61 Console.Write (", ");
62 Console.Write (res.GetOutArgName (i) + " " +
63 res.GetOutArg (i));
65 Console.WriteLine (")");
67 return res;
71 class R2
73 string sTest;
74 public R2()
76 sTest = "R2";
79 public void Print()
81 Console.WriteLine(sTest);
85 [Serializable]
86 class R2_MBV
88 string sTest;
89 public R2_MBV()
91 sTest = "R2";
94 public string Data
96 get
98 return sTest;
103 class R1 : MarshalByRefObject
105 public R2 TestMBV() {
106 return new R2();
110 class Class1
112 static int Main(string[] args)
114 Console.WriteLine("test " + AppDomain.CurrentDomain.FriendlyName);
115 AppDomain app2 = AppDomain.CreateDomain("2");
117 if (!RemotingServices.IsTransparentProxy(app2))
118 return 1;
120 ObjectHandle o = AppDomain.CurrentDomain.CreateInstance(typeof(R1).Assembly.FullName, typeof(R1).FullName);
121 R1 myobj = (R1) o.Unwrap();
123 // should not be a proxy in our domain..
124 if (RemotingServices.IsTransparentProxy(myobj))
126 Console.WriteLine("CreateInstance return TP for in our current domain");
127 return 2;
130 o = app2.CreateInstance(typeof(R1).Assembly.FullName, typeof(R1).FullName);
132 Console.WriteLine("type: " + o.GetType().ToString());
134 myobj = (R1) o.Unwrap();
135 if (!RemotingServices.IsTransparentProxy(myobj))
136 return 3;
138 Console.WriteLine("unwrapped type: " + myobj.GetType().ToString());
140 R2 r2 = null;
141 bool bSerExc = false;
143 // this should crash
146 r2 = myobj.TestMBV();
148 catch (SerializationException)
150 bSerExc = true;
153 if (!bSerExc)
154 return 4;
156 Console.WriteLine("test-ok");
157 return 0;