public bool Setup(string serverType, string bootstrapUri, string assemblyImportRoot, IServerConfig config, string startupConfigFile) { m_AssemblyImporter = new AssemblyImport(assemblyImportRoot); if(!string.IsNullOrEmpty(startupConfigFile)) { AppDomain.CurrentDomain.ResetConfiguration(startupConfigFile); } var serviceType = Type.GetType(serverType); m_AppServer = (IManagedApp)Activator.CreateInstance(serviceType); var bootstrap = (IBootstrap)Activator.GetObject(typeof(IBootstrap), bootstrapUri); var ret = m_AppServer.Setup(bootstrap, config); if (ret) { m_Log = ((IAppServer)m_AppServer).Logger; AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); } return ret; }
protected override AppServerMetadata GetAppServerMetadata(IServerConfig serverConfig) { AppDomain validateDomain = null; AppServerMetadata metadata = null; try { validateDomain = AppDomain.CreateDomain("ValidationDomain", AppDomain.CurrentDomain.Evidence, IsolationApp.GetAppWorkingDir(serverConfig), string.Empty, false); AssemblyImport.RegisterAssembplyImport(validateDomain); validateDomain.SetData(typeof(IsolationMode).Name, ConfigSource.Isolation); var validatorType = typeof(RemoteAppTypeValidator); var validator = (RemoteAppTypeValidator)validateDomain.CreateInstanceAndUnwrap(validatorType.Assembly.FullName, validatorType.FullName); var result = validator.GetServerMetadata(serverConfig.Type); if (!result.Result) { Logger.Error(result.Message); return(null); } metadata = result.Value; } finally { if (validateDomain != null) { AppDomain.Unload(validateDomain); } } return(metadata); }