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=81686 --- shadow/81686 2007-05-19 19:46:13.000000000 -0400 +++ shadow/81686.tmp.26915 2007-05-19 19:46:13.000000000 -0400 @@ -0,0 +1,120 @@ +Bug#: 81686 +Product: Mono: Class Libraries +Version: 1.2 +OS: All +OS Details: +Status: NEW +Resolution: +Severity: +Priority: Normal +Component: System +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: SoapFormatter cannot deserialize the same MBR twice + +Hard to find a concise summary for this problem: + +When the same MBR object is returned both as a return value +and also as part of an "out" array or ArrayList parameter, +the SOAP formatter doesn't call IObjectReference.GetObject () +of the MBR's ObjRef. This leads to an exception (for array params) +or to invalid content (for ArrayList params). + + +Test case: + +using System; +using System.Collections; +using System.Runtime.Remoting; +using System.Runtime.Remoting.Channels; +using System.Runtime.Remoting.Channels.Http; + +public class Service : MarshalByRefObject +{ + public Service Test (out Service[] a) + { + Service obj = new Service (); + a = new Service [] { obj }; + return obj; + // return null or return otherObj works + } + + public Service Test (out ArrayList a) + { + a = new ArrayList (); + Service obj = new Service (); + a.Add (obj); + return obj; + // return null or return otherObj works + } +} + +class T +{ + static void Main () + { + new HttpChannel (8086); + RemotingServices.Marshal (new Service (), "test"); + + Service remObj = (Service) RemotingServices.Connect ( + typeof (Service), "http://localhost:8086/test"); + + ArrayList list; + remObj.Test (out list); + // it's of type 'ObjRef' instead of 'Service': + Console.WriteLine (list [0]); + + Service [] array; + remObj.Test (out array); + } +} + + +Output + + +System.Runtime.Remoting.ObjRef <-- this must be 'Service' + +Unhandled Exception: System.InvalidCastException: Cannot cast from source +type to destination type. + at <0x00000> <unknown method> + at (wrapper managed-to-native) System.Array:SetValue (object,int[]) + at +System.Runtime.Serialization.Formatters.Soap.SoapReader.DeserializeArray +(Int64 id) [0x0019d] in +/usr/src/mono/head/mcs/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapReader.cs:396 + at System.Runtime.Serialization.Formatters.Soap.SoapReader.Deserialize () +[0x0004a] in +/usr/src/mono/head/mcs/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapReader.cs:449 + at System.Runtime.Serialization.Formatters.Soap.SoapReader.Deserialize +(System.IO.Stream inStream, ISoapMessage soapMessage) [0x00188] in +/usr/src/mono/head/mcs/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapReader.cs:137 + at System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize +(System.IO.Stream serializationStream, +System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x00034] in +/usr/src/mono/head/mcs/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapFormatter.cs:79 + at System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize +(System.IO.Stream serializationStream) [0x00000] in +/usr/src/mono/head/mcs/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapFormatter.cs:70 + at +System.Runtime.Remoting.Channels.SoapClientFormatterSink.DeserializeMessage +(System.IO.Stream responseStream, ITransportHeaders responseHeaders, +IMethodCallMessage mcm, +System.Runtime.Remoting.Channels.SoapMessageFormatter soapMsgFormatter) +[0x0001c] in +/usr/src/mono/head/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels/SoapClientFormatterSink.cs:177 + at +System.Runtime.Remoting.Channels.SoapClientFormatterSink.SyncProcessMessage +(IMessage msg) [0x0001f] in +/usr/src/mono/head/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels/SoapClientFormatterSink.cs:149 + at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke (IMessage +request) [0x000e3] in +/usr/src/mono/head/mcs/class/corlib/System.Runtime.Remoting.Proxies/RemotingProxy.cs:100 + at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke +(System.Runtime.Remoting.Proxies.RealProxy rp, IMessage msg, +System.Exception& exc, System.Object[]& out_args) [0x0009a] in +/usr/src/mono/head/mcs/class/corlib/System.Runtime.Remoting.Proxies/RealProxy.cs:187 _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
