Как запустить код в другом домене приложений? Мне нужно песочница мой код IronPython

У меня есть некоторый код IronPython, и я передаю переменные ему и хочу получить результат от Python. Мне удалось получить результат от IronPython, когда я создал движок в текущем домене:

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

тогда я просто беру такой результат:

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

Тем не менее, мне нужна песочница, поэтому я создаю домен приложений с ограниченными разрешениями и запускаю в нем движок:

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

Но на этот раз, когда я пытаюсь получить результат таким же образом, я получаю

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

Это потому, что моя переменная "result" находится в другом домене, а результат из Ironpython должен быть сериализован?

Можно ли создать переменную в новом домене? Я хочу, чтобы моя программа сделала это:

1. Читать словарь из файла.

2. Создайте новый домен с ограничениями и передайте ему словарь.

3. Работайте в железном питоне, вызывая функции Python из C#(все в ограниченной области)

4.Возврат результатов в неограниченный домен.

1 ответ

Да - переменные между доменами сериализуются между доменами, если они не наследуются от MarshallByRefObject, как описано здесь. Обмен данными между доменами приложений

Ваш второй вопрос: "Могу ли я... сделать кое-что на C#" - да; вы можете делать все что угодно в AppDomain. Вам просто нужно следовать правилам передачи данных AppDomain, чтобы передавать вещи между AppDomains.

Другие вопросы по тегам