private void WorkInSharedAppdomain(StabilityTestDefinition metadata, int threadId) { //The Marshaled worker class should behave normally in context of it's own domain MarshaledWorker worker = new MarshaledWorker(); worker.DoWork(metadata, threadId); }
/// <summary> /// Configures a new Appdomain for executing the stress test within /// </summary> /// <param name="metadata"></param> /// <param name="threadId"></param> private void WorkInNewAppDomain(StabilityTestDefinition metadata, int threadId) { AppDomainSetup ads = new AppDomainSetup(); ads.ApplicationBase = System.Environment.CurrentDirectory; ads.DisallowBindingRedirects = false; ads.DisallowCodeDownload = false; ads.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; string exeAssembly = Assembly.GetEntryAssembly().FullName; string callingDomainName = Thread.GetDomain().FriendlyName; AppDomain a = AppDomain.CreateDomain("Worker " + threadId.ToString(), null, ads); MarshaledWorker worker = (MarshaledWorker)a.CreateInstanceAndUnwrap(Assembly.GetCallingAssembly().FullName, typeof(MarshaledWorker).FullName); worker.DoWork(metadata, threadId); AppDomain.Unload(a); }