Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=77191 --- shadow/77191 2006-01-09 11:53:17.000000000 -0500 +++ shadow/77191.tmp.28551 2006-01-09 11:53:17.000000000 -0500 @@ -0,0 +1,221 @@ +Bug#: 77191 +Product: Mono: Runtime +Version: unspecified +OS: GNU/Linux [Other] +OS Details: Linux g2 2.6.12.1 #12 Wed Oct 26 02:26:02 EEST 2005 i686 unknown +Status: NEW +Resolution: +Severity: +Priority: Normal +Component: remoting +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Summary: Mono remoting runtime can not resolve overload method during remote request method call processing. + +Description of Problem: +Mono remoting runtime can not resolve overload method during remote request +method call processing. Microsoft .NET implementation works with success +for this case. + +Steps to reproduce the problem: +Compile this file with gmcs (don't forget /r:System.Runtime.Remoting). Then +run with mono <file.exe>: + +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.Remoting.Channels; +using System.Runtime.Remoting.Channels.Tcp; +using System.Runtime.Remoting; +using System.Net.Sockets; +using System.Net; + +namespace MonoRemotingBug +{ + interface I1 : IDisposable + { + void Test1(); + } + + interface I2 + { + void Test2(); + void Test2(bool argument); + } + + interface I3 : I1, I2 + { + } + + interface I4 : I1 + { + } + + interface I5 : I4, I3 + { + } + + class RemotedClass : MarshalByRefObject, I5 + { + ~RemotedClass() + { + Dispose(false); + } + + public void Test1() + { + Console.WriteLine("Test1 OK."); + } + + public void Test2() + { + Console.WriteLine("Test2.1 OK"); + } + + public void Test2(bool argument) + { + Console.WriteLine("Test2.2 OK"); + } + + #region IDisposable Members + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + protected virtual void Dispose(bool disposing) + { + if (disposing) + Console.WriteLine("Test3 OK"); + } + } + + class Program + { + static int FindFreePort() + { + Socket socket = new Socket(AddressFamily.InterNetwork, +SocketType.Stream, ProtocolType.Tcp); + try + { + socket.Bind(new IPEndPoint(IPAddress.Any, 0)); + return ((IPEndPoint)socket.LocalEndPoint).Port; + } + finally + { + socket.Close(); + } + } + + static void Main(string[] args) + { + try + { + int port = FindFreePort(); + ChannelServices.RegisterChannel(new TcpChannel(port)); + RemotedClass remotedClass = new RemotedClass(); + RemotingServices.Marshal(remotedClass, "Root"); + Console.WriteLine("Server started."); + try + { + I5 i = (I5)RemotingServices.Connect(typeof(I5), + string.Format("tcp://localhost:{0}/Root", port)); + try + { + i.Test1(); + i.Test2(); + i.Test2(true); + i.Dispose(); + } + catch + { + Console.WriteLine("Some test have failed. See +pending error messages for details."); + throw; + } + Console.WriteLine("All OK, congradulations!"); + } + finally + { + RemotingServices.Disconnect(remotedClass); + Console.WriteLine("Server stopped."); + } + } + catch (Exception e) + { + Console.Error.WriteLine(e); + } + } + } +} + +Actual Results: +Server started. +Test1 OK. +Test2.1 OK +Test2.2 OK +Some test have failed. See pending error messages for details. +Server stopped. +System.Reflection.AmbiguousMatchException: Ambiguous matching in method +resolution + +Server stack trace: +in <0x000a4> System.Reflection.Binder:FindMostDerivedMatch +(System.Reflection.MethodBase[] match) +in <0x0020a> System.MonoType:GetMethodImpl (System.String name, +BindingFlags bindingAttr, System.Reflection.Binder binder, +CallingConventions callConvention, System.Type[] types, +System.Reflection.ParameterModifier[] modifiers) +in <0x00023> System.Type:GetMethod (System.String name, BindingFlags +bindingAttr) +in <0x00051> System.Runtime.Remoting.RemotingServices:GetMethodBaseFromName +(System.Type type, System.String methodName, System.Type[] signature) +in <0x00058> System.Runtime.Remoting.Messaging.MethodCall:ResolveMethod () +in <0x0007e> System.Runtime.Remoting.Messaging.MethodCall:.ctor +(System.Runtime.Remoting.Messaging.Header[] headers) +in <0x005e6> +System.Runtime.Serialization.Formatters.Binary.MessageFormatter:ReadMethodCall +(System.IO.BinaryReader reader, Boolean hasHeaders, +System.Runtime.Remoting.Messaging.HeaderHandler headerHandler, +System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter) +in <0x000ba> +System.Runtime.Serialization.Formatters.Binary.BinaryFormatter:NoCheckDeserialize +(System.IO.Stream serializationStream, +System.Runtime.Remoting.Messaging.HeaderHandler handler) +in <0x00010> +System.Runtime.Serialization.Formatters.Binary.BinaryFormatter:Deserialize +(System.IO.Stream serializationStream, +System.Runtime.Remoting.Messaging.HeaderHandler handler) +in <0x00248> +System.Runtime.Remoting.Channels.BinaryServerFormatterSink:ProcessMessage +(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders +requestHeaders, System.IO.Stream requestStream, IMessage responseMsg, +ITransportHeaders responseHeaders, System.IO.Stream responseStream) + +Exception rethrown at [0]: + +in <0x006dc> System.Runtime.Remoting.Proxies.RealProxy:PrivateInvoke +(System.Runtime.Remoting.Proxies.RealProxy rp, IMessage msg, +System.Exception exc, System.Object[] out_args) + + +Expected Results: +Server started. +Test1 OK. +Test2.1 OK +Test2.2 OK +Test3 OK +All OK, congradulations! +Server stopped. + +How often does this happen? +Always + +Additional Information: _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
