[IronPython] IronPython.Runtime.Types.PythonType Is not marked as Serializable Exception

mohammad mustaq mustaq2001 at gmail.com
Sat Apr 10 15:50:46 CEST 2010


Hi Dino,

Is there any update on this. Should you need more details let me know.

thanks,
Mustaq

On Wed, Apr 7, 2010 at 10:40 AM, mohammad mustaq <mustaq2001 at gmail.com>wrote:

> Hi Dino,
>
> If have tweaked your code to reproduce the exception that I am facing. Let
> me know if you need more details.
>
> thanks,
> Mustaq
>
>
> using System;
> using Microsoft.Scripting;
> using IronPython.Hosting;
> using Microsoft.Scripting.Hosting;
>
>
> class Foo
> {
>     public static void Main(string[] args)
>     {
>         AppDomain ad = AppDomain.CreateDomain("foo");
>         var engine = Python.CreateEngine(ad);
>         engine.Runtime.LoadAssembly(
> typeof(MbrBase).Assembly);
>
>         var code = engine.CreateScriptSourceFromString(@"
> import MbrBase
> class C(MbrBase):
>     pass
>
> a = C()
> ", SourceCodeKind.Statements);
>
>         var scope = engine.CreateScope();
>         code.Execute(scope);
>
>         Console.WriteLine("Trying to do it... {0}",
> AppDomain.CurrentDomain.Id <http://appdomain.currentdomain.id/>);
>         MbrBase mbr = (MbrBase)scope.GetVariable("a");
>
> //     MY CHANGES
>
>         string isSubClassCode = String.Format("issubclass({0},{1})", "C",
> "MbrBase");
>         ScriptSource script =
> engine.CreateScriptSourceFromString(isSubClassCode,
> SourceCodeKind.Expression);
>         bool result = (bool)script.Execute(scope);
>
>         if (result == true)
>         {
>             ObjectOperations ops = engine.Operations;
>
>             object subClass = scope.GetVariable("C");
>             object instance = ops.Call(subClass);
>
>             mbr = instance as MbrBase;
>         }
>
> //      END OF MY CHANGE
>
>         mbr.DoItVirtually();
>         mbr.DoIt();
>         Console.ReadKey();
>
>     }
> }
>
> public class MbrBase : MarshalByRefObject
> {
>     public virtual void DoItVirtually()
>     {
>         Console.WriteLine("Did it virtually {0}",
> AppDomain.CurrentDomain.Id <http://appdomain.currentdomain.id/>);
>     }
>
>     public void DoIt()
>     {
>         Console.WriteLine("Did it {0}", AppDomain.CurrentDomain.Id<http://appdomain.currentdomain.id/>
> );
>     }
> }
>
>
> On Tue, Mar 30, 2010 at 10:12 PM, Dino Viehland <dinov at microsoft.com>wrote:
>
>>  This works for me w/ 2.6.  I’ve included my simple repro below which
>> creates a new script engine in a remote app domain, loads my assembly in,
>> runs some code which subclasses the MBRO base class, instantiates an
>> instance of this class, and then calls it from a remote app domain.  The key
>> thing here is that when an MBRO is involved a PythonType should not need to
>> be serialized – the type should live in the remote app domain and all
>> execution of that code should also happen in the remote app domain where we
>> have access to the local PythonType object.  Are you also subclassing types
>> which don’t derive from MBRO?  It might help to run IronPython w/
>> -X:ExceptionDetail if the exception is propagating through IronPython –
>> that’ll give a better stack trace to understand what’s going on.  Or if you
>> can tweak the simple repro below to match the behavior you’re seeing that’d
>> be helpful as well.
>>
>>
>>
>> using System;
>>
>> using Microsoft.Scripting;
>>
>> using IronPython.Hosting;
>>
>>
>>
>> class Foo {
>>
>>     public static void Main(string[] args) {
>>
>>         AppDomain ad = AppDomain.CreateDomain("foo");
>>
>>         var engine = Python.CreateEngine(ad);
>>
>>         engine.Runtime.LoadAssembly(typeof(MbrBase).Assembly);
>>
>>
>>
>>         var code = engine.CreateScriptSourceFromString(@"
>>
>> import MbrBase
>>
>> class C(MbrBase):
>>
>>     pass
>>
>>
>>
>> a = C()
>>
>> ", SourceCodeKind.Statements);
>>
>>
>>
>>         var scope = engine.CreateScope();
>>
>>         code.Execute(scope);
>>
>>
>>
>>         Console.WriteLine("Trying to do it... {0}",
>> AppDomain.CurrentDomain.Id);
>>
>>         MbrBase mbr = (MbrBase)scope.GetVariable("a");
>>
>>         mbr.DoItVirtually();
>>
>>         mbr.DoIt();
>>
>>     }
>>
>> }
>>
>>
>>
>> public class MbrBase : MarshalByRefObject {
>>
>>     public virtual void DoItVirtually() {
>>
>>         Console.WriteLine("Did it virtually {0}",
>> AppDomain.CurrentDomain.Id);
>>
>>     }
>>
>>
>>
>>     public void DoIt() {
>>
>>         Console.WriteLine("Did it {0}", AppDomain.CurrentDomain.Id);
>>
>>     }
>>
>> }
>>
>>
>>
>> *From:* users-bounces at lists.ironpython.com [mailto:
>> users-bounces at lists.ironpython.com] *On Behalf Of *mohammad mustaq
>> *Sent:* Monday, March 29, 2010 8:13 PM
>> *To:* users at lists.ironpython.com
>> *Subject:* [IronPython] IronPython.Runtime.Types.PythonType Is not marked
>> as Serializable Exception
>>
>>
>>
>> Hi,
>>
>> I have IronPython embedded in my C# application. I face issues while
>> creating the python engine in a different appdomain.
>>
>> It is imposed that every class in IronPython inherit the .NET base class
>> say ClassA. ClassA is derived from MarshalByRefObj as I need to pass an
>> instance of this class to a new appdomain.
>> I create a new appdomain and pass the instance of ClassA to this
>> Appdomain. While calling a method in python class through the instance of
>> ClassA I get an exception mentioning that "Type
>> 'IronPython.Runtime.Types.PythonTyp
>>
>> e' in Assembly 'IronPython, Version=2.0.0.0, Culture=neutral,
>> PublicKeyToken=31bf3856ad364e35' is not marked as serializable".
>>
>> How do I Serialize this PythonType. One way that i know is to modify the
>> IronPython source and mark the required types as Serializable (but i do not
>> know where it will lead to and its consequences). Could you please suggest a
>> way to perform the required operation. Should you need more details let me
>> know.
>>
>> thanks,
>> Mustaq
>>
>> P.S. I have used both IronPython 2.0 and 2.6.
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20100410/fce6f9e3/attachment.html>


More information about the Ironpython-users mailing list