Пример #1
0
        /// <summary>
        /// 加载心跳服务到内存
        /// </summary>
        public override void Load()
        {
            heartInfo.HeartDomain = AppDomainHelper.CreateHeartServerAppDomain(heartInfo.DirPath, heartInfo.Name); //heartInfo.AssemblyFilePath,

            if (heartInfo.HeartDomain != null)
            {
                heartInfo.heartState = heartInfo.loadedHeart;
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
        }