[IronPython] Remoting broken in 2.0?

Marc Saegesser marc at saegesser.org
Thu Jan 22 02:21:12 CET 2009


Type 'Microsoft.Linq.Expressions.ParameterExpression' in Assembly
'Microsoft.Scripting.Core, Version=0.9.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35' is not marked as serializable.

Server stack trace:
   at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType
type)
   at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type
type, StreamingContext context)
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object
obj, ISurrogateSelector surrogateSelector, StreamingContext context,
SerObjectInfoInit serObjectInfoInit, IFor
matterConverter converter, ObjectWriter objectWriter)
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object
obj, ISurrogateSelector surrogateSelector, StreamingContext context,
SerObjectInfoInit serObjectInfoInit, IFormatt
erConverter converter, ObjectWriter objectWriter)
   at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object
graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream
serializationStream, Object graph, Header[] headers, Boolean fCheck)
   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SerializeMessage(IMessage
msg, ITransportHeaders& headers, Stream& stream)
   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage
msg)

Exception rethrown at [0]:
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage
reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&
msgData, Int32 type)
   at Microsoft.Scripting.Actions.IDynamicObject.GetMetaObject(Expression
parameter)
   at Microsoft.Scripting.Actions.MetaObject.ObjectToMetaObject(Object
argValue, Expression parameterExpression)
   at Microsoft.Scripting.Actions.MetaAction.Bind[T](Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.CreateNewRule(Rule`1
originalMonomorphicRule, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at Microsoft.Scripting.Actions.UpdateDelegates.Update4[T,T0,T1,T2,T3,TRet](CallSite
site, T0 arg0, T1 arg1, T2 arg2, T3 arg3)
   at S$2.Initialize$17()
   at _stub_$226##76(Closure , CallSite , CodeContext , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4
target, CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite
site, T0 arg0, T1 arg1)
   at <module>$224##74(Closure , Scope , LanguageContext )
   at Microsoft.Scripting.Runtime.OptimizedScriptCode.InvokeTarget(LambdaExpression
code, Scope scope)
   at Microsoft.Scripting.ScriptCode.Run(Scope scope)
   at IronPython.Hosting.PythonCommandLine.<>c__DisplayClass1.<RunOneInteraction>b__0()
SystemError: Type 'Microsoft.Linq.Expressions.ParameterExpression' in
Assembly 'Microsoft.Scripting.Core, Version=0.9.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35' is not marked as serializab
le.
Marc



On Wed, Jan 21, 2009 at 5:57 PM, Dino Viehland <dinov at microsoft.com> wrote:
> Can you run w/ -X:ExceptionDetail to get the full stack trace?
>
> It's presumably trying to serialize it for a call to IDynamicObject which has a GetMetaObject(Expression e) method on it.
>
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Marc Saegesser
> Sent: Wednesday, January 21, 2009 3:46 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] Remoting broken in 2.0?
>
> I was already using the typedproxy stuff in my code running under
> 2.0b3 and my code looks just like the sample code you showed.  It
> works great in 2.0b3, but throws an exception in 2.0.
>
> The class it's complaining about, ParameterExpression, really isn't
> serializable according to the documentation.  So the question is why
> is 2.0 trying to serialize a ParameterExpression when 2.0b3 wasn't?
> My remote object doesn't do anything with Linq or expressions so I'm
> not sure where it's coming from.
>
>
> Marc
>
>
>
> On Wed, Jan 21, 2009 at 5:27 PM, Dino Viehland <dinov at microsoft.com> wrote:
>> This is related to 470 but is slightly different.  But in both cases the CLR is lying to us and telling us your object does implement the interface but it really doesn't (or I'm assuming that's the case, maybe whatever you're doing Activator.CreateInstance does implement the interface).  But now we're blowing up before the interface cast on the remote side because Expression trees aren't serializable (whereas before we were blowing up on the other side of the remote call because the remote object doesn't actually implement the interface).
>>
>> The workaround at the bottom of that bug should work for you.  You can create a local "typed proxy" object which goes through the type object to get members instead of the instance.  That should avoid the interface check and you should be able to talk to the remote object.  For convenience here's the typed proxy object:
>>
>> class typedproxy(object):
>>    __slots__ = ['obj', 'proxyType']
>>    def __init__(self, obj, proxyType):
>>        self.obj = obj
>>        self.proxyType = proxyType
>>
>>    def __getattribute__(self, attr):
>>        proxyType = object.__getattribute__(self, 'proxyType')
>>        obj = object.__getattribute__(self, 'obj')
>>        return getattr(proxyType, attr).__get__(obj, proxyType)
>>
>>
>>
>> test = typedproxy(System.Activator.GetObject(RemoteTest, 'http://localhost:8000/RemoteTest'), RemoteTest)
>>
>>
>> If that doesn't work let us know.
>>
>>
>>
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Marc Saegesser
>> Sent: Wednesday, January 21, 2009 2:40 PM
>> To: users
>> Subject: [IronPython] Remoting broken in 2.0?
>>
>> I've been using 2.0b3 for quite some time with good results.  I just
>> tried to move to the final 2.0 release and ran into a fatal problem.
>> I use .Net Remoting and when I try to create a proxy to a well known
>> object using System.Activator.GetObject() I get the following error:
>>
>> SystemError: Type 'Microsoft.Linq.Expressions.ParameterExpression' in
>> Assembly 'Microsoft.Scripting.Core, Version=0.9.0.0, Culture=neutral,
>> PublicKeyToken=31bf3856ad364e35' is not marked as serializable.
>>
>> The only change was going from 2.0b3 to 2.0.
>>
>> I think this is the same problem reported in item 470
>> (http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=470)
>> in June of 2006.
>>
>> Any ideas on how to get around the problem?
>>
>> Marc
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>



More information about the Ironpython-users mailing list