2015-08-17 5 views
0

Я пытаюсь выяснить, как использовать AppDomains.Почему этот код, который работает на отдельном AppDomain Сбой моего процесса?

Потребности:

У меня есть один веб-приложение процесса, который динамически загружает библиотеку DLL и вызывает его с помощью отражения.

Я хочу, чтобы сбой в загруженной dll не разбивал процесс, в дополнение к созданию разделения между «внешним» кодом и моим базовым кодом.

Так что у меня этот «Isloated» класс:

public sealed class Isolated<T> : IDisposable where T : MarshalByRefObject 
{ 
    private AppDomain _domain; 
    private T _value; 

    public Isolated() 
    { 
     _domain = AppDomain.CreateDomain("Isolated:" + Guid.NewGuid(), 
      null, AppDomain.CurrentDomain.SetupInformation); 

     Type type = typeof(T); 

     _value = (T)_domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName); 
    } 

    public T Value 
    { 
     get 
     { 
      return _value; 
     } 
    } 

    public void Dispose() 
    { 
     if (_domain != null) 
     { 
      AppDomain.Unload(_domain); 

      _domain = null; 
     } 
    } 
} 

и я написал этот код ниже, мое ожидание не раздавят процесс, но это делает.

public class Work : MarshalByRefObject 
{ 
    public void DoSomething() 
    { 
     Thread thread = new Thread(new ThreadStart(() => 
     { 
      throw new Exception(); 
     })); 

     thread.IsBackground = true; 

     thread.Start(); 

     while (true) 
     { 
      System.Diagnostics.Trace.WriteLine("Hello from main thread"); 
     } 
    } 
} 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     using (Isolated<Work> isolated = new Isolated<Work>()) 
     { 
      isolated.Value.DoSomething(); 
     } 
    } 

Не могли бы вы помочь мне понять, что я делаю неправильно?

+1

Ваш код producesses необработанное исключение, которое будет убивать приложения независимо от AppDomain она отбрасывается. – Jehof

+0

Но не является ли одной из целей AppDomain для решения такого сценария? Например, если я использую стороннюю версию бета-версии плагина, я импортирую в приложение для производственной среды? –

+0

Также, пожалуйста, обратитесь к этому сообщению, которое упоминает его в ответе на комментарии: http://stackoverflow.com/questions/1094478/what-is-a-net-application-domain –

ответ