Передача значений назад и вперед appdomains

Если нет никакого контекста Сервера (т.е. Ваше выполнение офлайн), можно использовать HttpUtility. HtmlDecode.

9
задан devoured elysium 9 August 2009 в 05:59
поделиться

1 ответ

Проблема в вашем коде состоит в том, что вы никогда не передаете объект за границу; таким образом, у вас есть два экземпляра ada , по одному в каждом домене приложения (инициализатор статического поля работает в обоих доменах приложений). Вам нужно будет передать экземпляр за границу, чтобы задействовала магию MarshalByRefObject .

Например:

using System;
class MyBoundaryObject : MarshalByRefObject {
    public void SomeMethod(AppDomainArgs ada) {
        Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + "; executing");
        ada.myString = "working!";
    }
}
public class AppDomainArgs : MarshalByRefObject {
    public string myString { get; set; }
}
static class Program {
     static void Main() {
         AppDomain domain = AppDomain.CreateDomain("Domain666");
         MyBoundaryObject boundary = (MyBoundaryObject)
              domain.CreateInstanceAndUnwrap(
                 typeof(MyBoundaryObject).Assembly.FullName,
                 typeof(MyBoundaryObject).FullName);

         AppDomainArgs ada = new AppDomainArgs();
         ada.myString = "abc";
         Console.WriteLine("Before: " + ada.myString);
         boundary.SomeMethod(ada);
         Console.WriteLine("After: " + ada.myString);         
         Console.ReadKey();
         AppDomain.Unload(domain);
     }
}
20
ответ дан 4 December 2019 в 10:33
поделиться