Exemple #1
0
        /// <summary>
        /// 执行DLL任务
        /// </summary>
        /// <param name="job"></param>
        private void InvokeDllJob(ManageJob job)
        {
            NotifyClientLog(job.Id, "================= DLL Running =================");

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            var types   = job.Params.Select(p => typeof(string)).ToArray();
            var @params = job.Params.ToArray();

            _logger.Info($"Execute DLL Job:{job.Name}[{job.WorkPath}, {job.ClassName},{job.MethodName} ({string.Join(",", @params)})]");

            var writer = new HlcTextWriter();

            writer.WriteHandler += str =>
            {
                NotifyClientLog(job.Id, str);
            };
            var domainProxy = DynamicUtil.LoadDomain(job.WorkPath);

            domainProxy.SetOut(writer);
            var invokeDll = domainProxy.Invoke(job.ClassName, job.MethodName, types, @params);

            if (invokeDll != null)
            {
                NotifyClientLog(job.Id, $"DLL Result:{invokeDll.ToString()}");
            }

            NotifyClientLog(job.Id, $"================= DLL Job Finished, Elapsed [{stopwatch.Elapsed:g}] =================");
        }
Exemple #2
0
        /// <summary>
        /// 执行DLL服务
        /// </summary>
        /// <param name="job"></param>
        private void InvokeDllServer(ManageJob job)
        {
            var types   = job.Params.Select(p => typeof(string)).ToArray();
            var @params = job.Params.ToArray();

            var jobIndex = Jobs.FindIndex(j => j.Id.Equals(job.Id));

            if (jobIndex < 0)
            {
                return;
            }

            Jobs[jobIndex].State = JobState.Normal;
            UpdateClientJob(Jobs[jobIndex]);

            AsyncUtil.Run(() =>
            {
                Thread.Sleep(500);

                Jobs[jobIndex].State            = JobState.Normal;
                Jobs[jobIndex].PreviousFireTime = DateTimeOffset.Now;
                UpdateClientJob(Jobs[jobIndex]);

                NotifyClientLog(job.Id, "================= DLL Server Running ==================");

                _logger.Info($"Execute DLL Server Job:{job.Name}[{job.WorkPath}, {job.ClassName},{job.MethodName} ({string.Join(",", @params)})]");

                var writer           = new HlcTextWriter();
                writer.WriteHandler += str =>
                {
                    NotifyClientLog(job.Id, str);
                };

                var domainProxy     = DynamicUtil.LoadDomain(job.WorkPath);
                _domainDict[job.Id] = domainProxy;
                domainProxy.SetOut(writer);
                var result = domainProxy.Invoke(job.ClassName, job.MethodName, types, @params);
                if (result != null)
                {
                    NotifyClientLog(job.Id, $"DLL Server Result:{result.ToString()}");
                }
            }, () =>
            {
                //NotifyClientLog(job.Id, "DLL Server 运行完了?? 完了???");
                DynamicUtil.UnloadDomain(_domainDict[job.Id]);
                _domainDict.Remove(job.Id);
                Jobs[jobIndex].State = JobState.Complete;

                NotifyClientLog(job.Id, "================= DLL Server Finished ==================");
                UpdateClientJob(Jobs[jobIndex]);
            }, exception =>
            {
                if (exception is AppDomainUnloadedException)
                {
                    NotifyClientLog(job.Id, "================= DLL Server Uninstalled ==================");
                }
                else
                {
                    _logger.Error(exception);
                    NotifyClientLog(job.Id, "Server Error。" + exception.Message);
                    Jobs[jobIndex].State = JobState.Error;
                    DynamicUtil.UnloadDomain(_domainDict[job.Id]);
                    _domainDict.Remove(job.Id);

                    NotifyClientLog(job.Id, "================= DLL Server Error ==================");
                    UpdateClientJob(Jobs[jobIndex]);
                }
            });
        }