2016-08-19 52 views
0

我有一些IronPython代码,并im传递变量,并希望从python接收结果。我好不容易当我创建当前域的发动机得到IronPython的结果:如何在另一个AppDomain中运行代码?我需要sandbox我的IronPython代码

ScriptEngine pyEngine = IronPython.Hosting.Python.CreateEngine() 

那么我只拿结果类似:

var result = this.pyScope.GetVariable("ObiektMS").code_1_1_1("II"); 

不过,我需要它的沙盒这样的IM创造受权限限制的一个AppDomain和运行引擎在它:

ScriptEngine pyEngine = IronPython.Hosting.Python.CreateEngine(newDomain) 

但这一次,当我试图让结果在萨米方式我得到

An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in PythonTimeTests.exe 

是因为我的“结果”变量在不同的域中,并且Ironpython的结果必须被序列化?

是否可以在新域中创建一个变量? 我想让我的程序执行此操作:

1.从文件中读取字典。

2.创建一个有限制的新域,并将字典传递给它。

3.Do通过从C#调用Python函数(所有限制结构域)

4.Return结果到非限制域在铁蟒工作。

回答

1

是 - 跨域变量域之间的序列化,除非他们从MarshallByRefObject继承如下解释Sharing data between AppDomains

你的第二个问题是:“我能......做一些C#的东西” - 是的;你可以在AppDomain中做任何你想做的事情。您只需遵循AppDomain数据传输规则,以便在AppDomain之间传递内容。

相关问题