Как запустить код в другом домене приложений? Мне нужно песочница мой код 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.