/// <summary> /// 加载心跳服务到内存 /// </summary> public override void Load() { heartInfo.HeartDomain = AppDomainHelper.CreateHeartServerAppDomain(heartInfo.DirPath, heartInfo.Name); //heartInfo.AssemblyFilePath, if (heartInfo.HeartDomain != null) { heartInfo.heartState = heartInfo.loadedHeart; } }
/// <summary> /// 创建心跳AppDomain /// </summary> /// <param name="filePath"></param> /// <param name="dirPath"></param> /// <returns></returns> private bool FilterHeartAssembly(string filePath, string dirPath) { bool b = false; string fileName = filePath.Substring(dirPath.Length + 1); if (ruleMap[RuleEnum.CheckFileName](null, fileName)) // 检验.dll文件名规则是否以 Heart_Monitor_ 开头 { fileName = fileName.Split('.')[0]; b = effectiveHeartServerMap.ContainsKey(fileName); if (!b) { AppDomain heartDomain = AppDomainHelper.CreateHeartServerAppDomain(dirPath, fileName); //filePath, if (heartDomain != null) { try { if (!ruleMap[RuleEnum.CheckAssemblyClassName](heartDomain, fileName)) { DeleteHeartDir("加载的程序集没有继承于HeartBase的HeartServer对象", dirPath); } else { HeartServerInfo info = new HeartServerInfo(); info.AssemblyFilePath = filePath; info.DirPath = dirPath; info.Name = fileName; info.Description = tempHear.GetDescription(); info.SpanInfo = TimeConfigCollection.Single[fileName]; info.OnTimeConfigChange += info_OnTimeConfigChange; effectiveHeartServerMap.TryAdd(fileName, info); } // 验证完后 不管是否与规则相符 都执行卸载AppDomain操作 AppDomain.Unload(heartDomain); heartDomain = null; b = true; } catch (FileLoadException flex) { LogServer.WriteException("Load dll", flex, filePath); AppDomain.Unload(heartDomain); heartDomain = null; DeleteHeartDir("加载的程序集没有继承于HeartBase的HeartServer对象", dirPath); } } } } return(b); }
internal static OnceServer CreateOnceServerByKey(string key) { OnceServer os = null; HeartServerInfo hsi = HeartServerDirMonitor.Single[key]; if (hsi != null) { DirectoryHelper.DirectoryCopy(hsi.DirPath, OnceDirPath + hsi.Name); os = new OnceServer(); os.Domain = AppDomainHelper.CreateHeartServerAppDomain(OnceDirPath + hsi.Name, hsi.Name); if (os.Domain != null) { os.HeartServer = AppDomainHelper.CreateHeart(os.Domain, hsi.Name, hsi.Name + "." + AppDomainHelper.HeartClassName); } } return(os); }