Exemple #1
0
        public static void StartTest(InvokeWebServiceJob job, DateTime[] checkPoints, bool[] asserts)
        {
            Debug.Assert(checkPoints.Length == asserts.Length);

            int len = checkPoints.Length;

            for (int i = 0; i < len; i++)
            {
                bool result = false;
                foreach (JobSchedule schedule in job.Schedules)
                {
                    Debug.Assert(job.LastExecuteTime <= checkPoints[i], "上次执行时间不应大于本次执行时间。");
                    result = schedule.IsNextExecuteTime(job.LastExecuteTime.Value, checkPoints[i], timeOffset);

                    if (result)
                    {
                        break;
                    }
                }

                if (result != asserts[i] && Debugger.IsAttached)
                {
                    Debugger.Break();
                }

                Assert.AreEqual(asserts[i], result, string.Format("i={0}:时间点{1}执行情况与预期不一致。", i.ToString(), checkPoints[i]));

                if (result)
                {
                    job.LastExecuteTime = checkPoints[i];
                }
            }
        }
        public void IntensiveTest()
        {
            InvokeWebServiceJob job = ScheduleUtil.CreateDefaultJob();

            job.LastExecuteTime = new DateTime(2013, 7, 2);
            job.Schedules.Add(new JobSchedule("", "", new DateTime(2013, 7, 11),
                                              new DailyJobScheduleFrequency(1, new FixedTimeFrequency(new TimeSpan(6, 0, 0)))));

            var checkPoints = new[]
            {
                new DateTime(2013, 7, 11, 5, 58, 44), new DateTime(2013, 7, 11, 5, 59, 44), new DateTime(2013, 7, 11, 6, 00, 44),
                new DateTime(2013, 7, 12, 5, 58, 44), new DateTime(2013, 7, 12, 5, 59, 44), new DateTime(2013, 7, 12, 6, 00, 44),
                new DateTime(2013, 7, 13, 5, 58, 44), new DateTime(2013, 7, 13, 5, 59, 44), new DateTime(2013, 7, 13, 6, 00, 44),
                new DateTime(2013, 7, 14, 5, 58, 44), new DateTime(2013, 7, 14, 5, 59, 44), new DateTime(2013, 7, 14, 6, 00, 44),
            };

            var asserts = new[]
            {
                false, true, false,
                false, true, false,
                false, true, false,
                false, true, false,
            };

            ScheduleUtil.StartTest(job, checkPoints, asserts);
        }
Exemple #3
0
        private static JobBase CreateInvokeServiceJob()
        {
            InvokeWebServiceJob job = new InvokeWebServiceJob();

            job.JobID = UuidHelper.NewUuidString();

            job.Name                 = "即时服务调用";
            job.SvcOperationDefs     = new WfServiceOperationDefinitionCollection();
            job.LastStartExecuteTime = DateTime.Now.AddMinutes(-5);
            job.Category             = "单元测试";

            WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post,
                                                                                null,
                                                                                "http://localhost/MCSWebApp/PermissionCenterServices/Services/PermissionCenterToADService.asmx");

            WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection();

            parameters.Add(new WfServiceOperationParameter()
            {
                Name = "callerID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "callerID"
            });

            WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, "GetVersion", parameters, string.Empty);

            serviceDef.RtnXmlStoreParamName = "Version";
            serviceDef.Timeout = TimeSpan.FromSeconds(30);
            job.SvcOperationDefs.Add(serviceDef);

            return(job);
        }
        protected void btnSync_Click(object sender, EventArgs e)
        {
            InvokeWebServiceJob job = InvokeWebServiceJobAdapter.Instance.LoadSingleDataByJobID(JobID);

            if (job == null)
            {
                string url        = ResourceUriSettings.GetConfig().Paths["pcServiceAdSync"].Uri.ToString();
                string methodName = "StartADReverseSynchronize";
                WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection();
                parameters.Add(new WfServiceOperationParameter()
                {
                    Name = "taskID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "taskID"
                });                                                                                                                                                           //特殊用法
                string name = "AD逆同步-用户发起";

                job = Util.CreateImmediateJob(JobID, name, "AD→PC", url, methodName, parameters);
                InvokeWebServiceJobAdapter.Instance.Update(job);
            }

            //检查是否有任务已经进入执行序列
            if (SysTaskAdapter.Instance.Load(w => { w.AppendItem("CATEGORY", "AD→PC"); }).Any())
            {
                BannerNotice notic = (BannerNotice)Master.FindControl("notice");
                notic.Text = ("检测到已经存在一个未执行或执行中的同步任务,请等待任务结束或者终止任务后重试。");
            }
            else
            {
                SysTask task = job.ToSysTask();
                task.Url    = this.ResolveUrl("~/lists/ADReverseLog.aspx?id=" + task.TaskID);
                task.Source = MCS.Library.Principal.DeluxeIdentity.CurrentUser;
                SysTaskAdapter.Instance.Update(task);
            }
        }
Exemple #5
0
        public void DailyPeriodicityScheduleTest3()
        {
            InvokeWebServiceJob job = ScheduleUtil.CreateDefaultJob();

            job.Schedules.Add(new JobSchedule("", "", new DateTime(2013, 7, 11),
                                              new DailyJobScheduleFrequency(3, new RecurringTimeFrequency(5, IntervalUnit.Minute, new TimeSpan(12, 0, 0), new TimeSpan(13, 0, 0)))));

            var checkPoints = new[]
            {
                new DateTime(2013, 7, 11, 9, 8, 29), new DateTime(2013, 7, 11, 11, 59, 29), new DateTime(2013, 7, 11, 12, 0, 29), new DateTime(2013, 7, 11, 12, 4, 29),
                new DateTime(2013, 7, 11, 12, 5, 29), new DateTime(2013, 7, 11, 12, 6, 29), new DateTime(2013, 7, 11, 12, 10, 29), new DateTime(2013, 7, 11, 13, 0, 29),
                new DateTime(2013, 7, 12, 9, 8, 29), new DateTime(2013, 7, 12, 11, 55, 29), new DateTime(2013, 7, 12, 12, 0, 29), new DateTime(2013, 7, 12, 12, 1, 29),
                new DateTime(2013, 7, 12, 12, 4, 29), new DateTime(2013, 7, 12, 12, 5, 29), new DateTime(2013, 7, 12, 12, 6, 29), new DateTime(2013, 7, 13, 9, 8, 29),
                new DateTime(2013, 7, 13, 11, 59, 29), new DateTime(2013, 7, 13, 12, 0, 29), new DateTime(2013, 7, 13, 12, 1, 29)
            };

            var asserts = new[]
            {
                false, false, true, false,
                true, false, true, false,
                false, false, false, false,
                false, false, false, false,
                false, false, false,
            };

            ScheduleUtil.StartTest(job, checkPoints, asserts);
        }
		public static void StartTest(InvokeWebServiceJob job, DateTime[] checkPoints, bool[] asserts)
		{
			Debug.Assert(checkPoints.Length == asserts.Length);

			int len = checkPoints.Length;

			for (int i = 0; i < len; i++)
			{
				bool result = false;
				foreach (JobSchedule schedule in job.Schedules)
				{
					Debug.Assert(job.LastExecuteTime <= checkPoints[i], "上次执行时间不应大于本次执行时间。");
					result = schedule.IsNextExecuteTime(job.LastExecuteTime.Value, checkPoints[i], timeOffset);

					if (result)
						break;
				}

				if (result != asserts[i] && Debugger.IsAttached)
					Debugger.Break();

				Assert.AreEqual(asserts[i], result, string.Format("i={0}:时间点{1}执行情况与预期不一致。", i.ToString(), checkPoints[i]));

				if (result)
				{
					job.LastExecuteTime = checkPoints[i];
				}
			}
		}
        public void WeeklyPeriodicityScheduleTest5()
        {
            InvokeWebServiceJob job = ScheduleUtil.CreateDefaultJob();

            job.Schedules.Add(new JobSchedule("", "", new DateTime(2013, 7, 12),
                                              new WeeklyJobScheduleFrequency(ScheduleUtil.Weeks(2, 4, 6), 1, new RecurringTimeFrequency(5, IntervalUnit.Minute, new TimeSpan(12, 0, 0), new TimeSpan(13, 0, 0)))));

            var checkPoints = new[]
            {
                new DateTime(2013, 7, 11, 11, 59, 29), new DateTime(2013, 7, 11, 12, 0, 29), new DateTime(2013, 7, 11, 12, 5, 29), new DateTime(2013, 7, 11, 12, 9, 29),
                new DateTime(2013, 7, 12, 11, 59, 29), new DateTime(2013, 7, 12, 12, 0, 29), new DateTime(2013, 7, 12, 12, 1, 29),
                new DateTime(2013, 7, 13, 12, 0, 29), new DateTime(2013, 7, 14, 12, 0, 29), new DateTime(2013, 7, 15, 12, 0, 29), new DateTime(2013, 7, 16, 12, 0, 29),
                new DateTime(2013, 7, 16, 12, 5, 29), new DateTime(2013, 7, 17, 12, 0, 29), new DateTime(2013, 7, 18, 12, 0, 29)
            };

            var asserts = new[]
            {
                false, false, false, false,
                false, false, false,
                true, false, false, true,
                true, false, true
            };

            ScheduleUtil.StartTest(job, checkPoints, asserts);
        }
Exemple #8
0
        private JobBase CreateInvokingServiceJob()
        {
            WfConverterHelper.RegisterConverters();

            InvokeWebServiceJob newJob = new InvokeWebServiceJob();

            SetJobBaseInfo(newJob);
            newJob.SvcOperationDefs = JSONSerializerExecute.Deserialize <WfServiceOperationDefinitionCollection>(this.hdServiceDefinition.Value);

            return(newJob);
        }
        public void InvokeServiceTaskTest()
        {
            //准备Job信息
            //调用SysTaskSettings.GetSettings().GetExecutor("InvokeService")执行服务
            //检验状态

            InvokeWebServiceJob job = new InvokeWebServiceJob()
            {
                JobID            = UuidHelper.NewUuidString(),
                JobType          = JobType.InvokeService,
                Category         = "测试权限中心服务",
                Description      = "仅用于测试",
                Enabled          = true,
                Name             = "任务和作业的单元测试",
                SvcOperationDefs = new Workflow.WfServiceOperationDefinitionCollection()
            };

            WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection();

            parameters.Add(new WfServiceOperationParameter()
            {
                Name = "callerID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "callerID"
            });

            job.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition(new Workflow.WfServiceAddressDefinition(Workflow.WfServiceRequestMethod.Post, null,
                                                                                                                       "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"), "GetVersion", parameters, string.Empty));
            InvokeWebServiceJobAdapter.Instance.Update(job);

            DO.SysTask task = new DO.SysTask()
            {
                TaskID     = UuidHelper.NewUuidString(),
                TaskTitle  = "测试任务",
                ResourceID = job.JobID
            };

            SysTaskAdapter.Instance.Update(task);

            ISysTaskExecutor executor = SysTaskSettings.GetSettings().GetExecutor("InvokeService");

            executor.Execute(task);

            var task2 = SysTaskAdapter.Instance.Load(task.TaskID);

            Assert.IsNull(task2);
        }
Exemple #10
0
        internal static InvokeWebServiceJob CreateImmediateJob(string jobID, string name, string category, string url, string methodName, WfServiceOperationParameterCollection parameters)
        {
            InvokeWebServiceJob job = new InvokeWebServiceJob();

            job.JobID    = jobID;
            job.Category = category;

            job.Name             = name;
            job.SvcOperationDefs = new WfServiceOperationDefinitionCollection();

            WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, url);

            WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, methodName, parameters, string.Empty);

            serviceDef.Timeout = TimeSpan.FromSeconds(24 * 60 * 60);
            job.SvcOperationDefs.Add(serviceDef);

            return(job);
        }
		public void InvokeServiceTaskTest()
		{
			//准备Job信息
			//调用SysTaskSettings.GetSettings().GetExecutor("InvokeService")执行服务
			//检验状态

			InvokeWebServiceJob job = new InvokeWebServiceJob()
			{
				JobID = UuidHelper.NewUuidString(),
				JobType = JobType.InvokeService,
				Category = "测试权限中心服务",
				Description = "仅用于测试",
				Enabled = true,
				Name = "任务和作业的单元测试",
				SvcOperationDefs = new Workflow.WfServiceOperationDefinitionCollection()
			};

			WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection();

			parameters.Add(new WfServiceOperationParameter() { Name = "callerID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "callerID" });

			job.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition(new Workflow.WfServiceAddressDefinition(Workflow.WfServiceRequestMethod.Post, null,
				"http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"), "GetVersion", parameters, string.Empty));
			InvokeWebServiceJobAdapter.Instance.Update(job);

			DO.SysTask task = new DO.SysTask()
			{
				TaskID = UuidHelper.NewUuidString(),
				TaskTitle = "测试任务",
				ResourceID = job.JobID
			};

			SysTaskAdapter.Instance.Update(task);

			ISysTaskExecutor executor = SysTaskSettings.GetSettings().GetExecutor("InvokeService");

			executor.Execute(task);

			var task2 = SysTaskAdapter.Instance.Load(task.TaskID);

			Assert.IsNull(task2);
		}
        public void MonthlyOnceScheduleTest4()
        {
            InvokeWebServiceJob job = ScheduleUtil.CreateDefaultJob();

            job.Schedules.Add(new JobSchedule("", "", new DateTime(2013, 7, 11),
                                              new MonthlyJobScheduleFrequency(11, 1, new FixedTimeFrequency(new TimeSpan(7, 0, 0)))));

            var checkPoints = new[]
            {
                new DateTime(2013, 7, 11, 9, 6, 29), new DateTime(2013, 7, 11, 11, 59, 29), new DateTime(2013, 7, 11, 12, 0, 29), new DateTime(2013, 7, 12, 7, 0, 29),
                new DateTime(2013, 8, 11, 7, 0, 29), new DateTime(2013, 9, 11, 12, 0, 29), new DateTime(2013, 9, 12, 12, 0, 29), new DateTime(2013, 10, 11, 7, 0, 29),
            };

            var asserts = new[]
            {
                false, false, false, false,
                true, false, false, true,
            };

            ScheduleUtil.StartTest(job, checkPoints, asserts);
        }
Exemple #13
0
        public void WeeklyOnceScheduleTest4()
        {
            InvokeWebServiceJob job = ScheduleUtil.CreateDefaultJob();

            job.Schedules.Add(new JobSchedule("", "", new DateTime(2013, 7, 11),
                                              new WeeklyJobScheduleFrequency(ScheduleUtil.Weeks(2, 4, 6), 1, new FixedTimeFrequency(new TimeSpan(7, 0, 0)))));

            var checkPoints = new[]
            {
                new DateTime(2013, 7, 11, 11, 59, 29), new DateTime(2013, 7, 11, 12, 0, 29), new DateTime(2013, 7, 11, 12, 0, 29), new DateTime(2013, 7, 12, 6, 59, 29),
                new DateTime(2013, 7, 12, 12, 0, 29), new DateTime(2013, 7, 13, 6, 59, 31), new DateTime(2013, 7, 13, 12, 0, 29), new DateTime(2013, 7, 14, 7, 0, 29),
                new DateTime(2013, 7, 15, 7, 0, 29), new DateTime(2013, 7, 16, 6, 59, 29), new DateTime(2013, 7, 17, 12, 0, 29), new DateTime(2013, 7, 18, 12, 0, 29)
            };

            var asserts = new[]
            {
                false, false, false, false,
                false, true, false, false,
                false, false, false, false,
            };

            ScheduleUtil.StartTest(job, checkPoints, asserts);
        }
Exemple #14
0
        public void GenerateInvokeWebServiceJobTaskTest()
        {
            JobBaseAdapter.Instance.ClearAll();
            JobScheduleAdapter.Instance.ClearAll();
            SysTaskAdapter.Instance.ClearAll();

            JobSchedule schedule = CreateSingleTimeSchedule();

            JobScheduleAdapter.Instance.Update(schedule);

            for (int i = 0; i < 40; i++)
            {
                InvokeWebServiceJob job = (InvokeWebServiceJob)CreateInvokeServiceJob();
                job.Name = "即时调用服务" + i;
                job.Schedules.Add(schedule);

                InvokeWebServiceJobAdapter.Instance.Update(job);
            }

            SysTaskCollection sysTasks = new SysTaskCollection();

            List <Task> tasks = new List <Task>();

            for (int i = 0; i < 1; i++)
            {
                Task task = Task.Factory.StartNew(() =>
                                                  JobBaseAdapter.Instance.FetchNotDispatchedJobsAndConvertToTask(40, TimeSpan.FromSeconds(60), (job, t) => sysTasks.Add(t)));

                tasks.Add(task);
            }

            Task.WaitAll(tasks.ToArray());

            Assert.AreEqual(40, sysTasks.Count);

            sysTasks.ForEach(st => Console.WriteLine(st.TaskTitle));
        }
		public void InvokeHugeServiceTasksTest()
		{
			SysTaskAdapter.Instance.ClearAll();
			SysAccomplishedTaskAdapter.Instance.ClearAll();

			InvokeWebServiceJob job = new InvokeWebServiceJob()
			{
				JobID = UuidHelper.NewUuidString(),
				JobType = JobType.InvokeService,
				Category = "测试权限中心服务",
				Description = "仅用于测试",
				Enabled = true,
				Name = "任务和作业的单元测试",
				SvcOperationDefs = new Workflow.WfServiceOperationDefinitionCollection()
			};

			job.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition(new Workflow.WfServiceAddressDefinition(Workflow.WfServiceRequestMethod.Post, null, "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"), "GetVersion", null, string.Empty));
			InvokeWebServiceJobAdapter.Instance.Update(job);

			for (int i = 0; i < 400; i++)
			{
				DO.SysTask task = new DO.SysTask()
				{
					TaskID = UuidHelper.NewUuidString(),
					TaskTitle = "测试任务" + i,
					ResourceID = job.JobID,
					TaskType = "InvokeService"
				};

				SysTaskAdapter.Instance.Update(task);
			}

			int count = 0;
			var tasks = SysTaskAdapter.Instance.FetchNotRuningSysTasks(800, m =>
			{
				SysTaskAdapter.Instance.UpdateStatus(m.TaskID, SysTaskStatus.Running);

			});
			Thread thread = Thread.CurrentThread;

			Assert.AreEqual(400, tasks.Count);

			Debug.WriteLine(DateTime.Now + "开始执行");
			Stopwatch watch = new Stopwatch();
			watch.Start();

			var result = System.Threading.Tasks.Parallel.ForEach<DO.SysTask>(tasks, t =>
			{
				if (t.TaskType == "InvokeService")
				{
					Debug.WriteLine(DateTime.Now + "当前执行:" + System.Threading.Interlocked.Increment(ref count) + "  主线程状态" + thread.ThreadState + "当前线程ID:" + Thread.CurrentThread.ManagedThreadId);
					ISysTaskExecutor exec = SysTaskSettings.GetSettings().GetExecutor("InvokeService");
					exec.Execute(t);
				}
			});

			watch.Stop();

			Debug.WriteLine(string.Format("已完成所有任务: {0} 耗时 {1}ms", result.IsCompleted, watch.ElapsedMilliseconds));
			Debug.WriteLine(DateTime.Now + "主线程执行结束");



		}
		public void InvokeHugeServiceTasksTest2()
		{
			SysTaskAdapter.Instance.ClearAll();
			SysAccomplishedTaskAdapter.Instance.ClearAll();

			InvokeWebServiceJob job = new InvokeWebServiceJob()
			{
				JobID = UuidHelper.NewUuidString(),
				JobType = JobType.InvokeService,
				Category = "测试权限中心服务",
				Description = "仅用于测试",
				Enabled = true,
				Name = "任务和作业的单元测试",
				SvcOperationDefs = new Workflow.WfServiceOperationDefinitionCollection()
			};

			job.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition(new Workflow.WfServiceAddressDefinition(Workflow.WfServiceRequestMethod.Post, null, "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"), "GetVersion", null, string.Empty));
			InvokeWebServiceJobAdapter.Instance.Update(job);

			for (int i = 0; i < 1500; i++)
			{
				DO.SysTask task = new DO.SysTask()
				{
					TaskID = UuidHelper.NewUuidString(),
					TaskTitle = "测试任务" + i,
					ResourceID = job.JobID,
					TaskType = "InvokeService"
				};

				SysTaskAdapter.Instance.Update(task);
			}

			int count = 0;

			var tasks = SysTaskAdapter.Instance.FetchNotRuningSysTasks(-1, m =>
			{
				SysTaskAdapter.Instance.UpdateStatus(m.TaskID, SysTaskStatus.Running);
			});

			Debug.WriteLine(DateTime.Now + "开始执行");
			Stopwatch watch = new Stopwatch();
			watch.Start();
			using (AutoResetEvent eventAuto = new AutoResetEvent(false))
			{
				foreach (var task in tasks)
				{
					ThreadPool.QueueUserWorkItem(item =>
					{
						DO.SysTask curTask = (DO.SysTask)item;
						if (curTask.TaskType == "InvokeService")
						{
							try
							{
								ISysTaskExecutor exec = SysTaskSettings.GetSettings().GetExecutor("InvokeService");
								exec.Execute(curTask);
							}
							catch (Exception exx)
							{
								Debug.WriteLine("出现了意外的错误" + exx.ToString());
							}
							finally
							{
								int newCount = System.Threading.Interlocked.Increment(ref count);
								Debug.WriteLine(DateTime.Now + "当前执行:" + newCount + "当前线程ID:" + Thread.CurrentThread.ManagedThreadId);
								eventAuto.Set();
							}
						}
					}, task);
				}

				int workerThreads, completionPortThreads;
				ThreadPool.GetAvailableThreads(out  workerThreads, out completionPortThreads);

				Debug.WriteLine("线程池可用线程数" + workerThreads);

				while (count != tasks.Count)
				{
					eventAuto.WaitOne();
				}
			}

			watch.Stop();

			Debug.WriteLine(string.Format("耗时 {0}ms", watch.ElapsedMilliseconds));
			Debug.WriteLine(DateTime.Now + "主线程执行结束");
		}
		private JobBase CreateInvokingServiceJob()
		{
			WfConverterHelper.RegisterConverters();

			InvokeWebServiceJob newJob = new InvokeWebServiceJob();
			SetJobBaseInfo(newJob);
			newJob.SvcOperationDefs = JSONSerializerExecute.Deserialize<WfServiceOperationDefinitionCollection>(this.hdServiceDefinition.Value);

			return newJob;
		}
        public void InvokeHugeServiceTasksTest()
        {
            SysTaskAdapter.Instance.ClearAll();
            SysAccomplishedTaskAdapter.Instance.ClearAll();

            InvokeWebServiceJob job = new InvokeWebServiceJob()
            {
                JobID            = UuidHelper.NewUuidString(),
                JobType          = JobType.InvokeService,
                Category         = "测试权限中心服务",
                Description      = "仅用于测试",
                Enabled          = true,
                Name             = "任务和作业的单元测试",
                SvcOperationDefs = new Workflow.WfServiceOperationDefinitionCollection()
            };

            job.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition(new Workflow.WfServiceAddressDefinition(Workflow.WfServiceRequestMethod.Post, null, "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"), "GetVersion", null, string.Empty));
            InvokeWebServiceJobAdapter.Instance.Update(job);

            for (int i = 0; i < 400; i++)
            {
                DO.SysTask task = new DO.SysTask()
                {
                    TaskID     = UuidHelper.NewUuidString(),
                    TaskTitle  = "测试任务" + i,
                    ResourceID = job.JobID,
                    TaskType   = "InvokeService"
                };

                SysTaskAdapter.Instance.Update(task);
            }

            int count = 0;
            var tasks = SysTaskAdapter.Instance.FetchNotRuningSysTasks(800, m =>
            {
                SysTaskAdapter.Instance.UpdateStatus(m.TaskID, SysTaskStatus.Running);
            });
            Thread thread = Thread.CurrentThread;

            Assert.AreEqual(400, tasks.Count);

            Debug.WriteLine(DateTime.Now + "开始执行");
            Stopwatch watch = new Stopwatch();

            watch.Start();

            var result = System.Threading.Tasks.Parallel.ForEach <DO.SysTask>(tasks, t =>
            {
                if (t.TaskType == "InvokeService")
                {
                    Debug.WriteLine(DateTime.Now + "当前执行:" + System.Threading.Interlocked.Increment(ref count) + "  主线程状态" + thread.ThreadState + "当前线程ID:" + Thread.CurrentThread.ManagedThreadId);
                    ISysTaskExecutor exec = SysTaskSettings.GetSettings().GetExecutor("InvokeService");
                    exec.Execute(t);
                }
            });

            watch.Stop();

            Debug.WriteLine(string.Format("已完成所有任务: {0} 耗时 {1}ms", result.IsCompleted, watch.ElapsedMilliseconds));
            Debug.WriteLine(DateTime.Now + "主线程执行结束");
        }
Exemple #19
0
		private static JobBase CreateInvokeServiceJob()
		{
			InvokeWebServiceJob job = new InvokeWebServiceJob();

			job.JobID = UuidHelper.NewUuidString();

			job.Name = "即时服务调用";
			job.SvcOperationDefs = new WfServiceOperationDefinitionCollection();
			job.LastStartExecuteTime = DateTime.Now.AddMinutes(-5);
			job.Category = "单元测试";

			WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post,
				null,
				"http://localhost/MCSWebApp/PermissionCenterServices/Services/PermissionCenterToADService.asmx");

			WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection();

			parameters.Add(new WfServiceOperationParameter() { Name = "callerID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "callerID" });

			WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, "GetVersion", parameters, string.Empty);

			serviceDef.RtnXmlStoreParamName = "Version";
			serviceDef.Timeout = TimeSpan.FromSeconds(30);
			job.SvcOperationDefs.Add(serviceDef);

			return job;
		}
        public void InvokeHugeServiceTasksTest2()
        {
            SysTaskAdapter.Instance.ClearAll();
            SysAccomplishedTaskAdapter.Instance.ClearAll();

            InvokeWebServiceJob job = new InvokeWebServiceJob()
            {
                JobID            = UuidHelper.NewUuidString(),
                JobType          = JobType.InvokeService,
                Category         = "测试权限中心服务",
                Description      = "仅用于测试",
                Enabled          = true,
                Name             = "任务和作业的单元测试",
                SvcOperationDefs = new Workflow.WfServiceOperationDefinitionCollection()
            };

            job.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition(new Workflow.WfServiceAddressDefinition(Workflow.WfServiceRequestMethod.Post, null, "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"), "GetVersion", null, string.Empty));
            InvokeWebServiceJobAdapter.Instance.Update(job);

            for (int i = 0; i < 1500; i++)
            {
                DO.SysTask task = new DO.SysTask()
                {
                    TaskID     = UuidHelper.NewUuidString(),
                    TaskTitle  = "测试任务" + i,
                    ResourceID = job.JobID,
                    TaskType   = "InvokeService"
                };

                SysTaskAdapter.Instance.Update(task);
            }

            int count = 0;

            var tasks = SysTaskAdapter.Instance.FetchNotRuningSysTasks(-1, m =>
            {
                SysTaskAdapter.Instance.UpdateStatus(m.TaskID, SysTaskStatus.Running);
            });

            Debug.WriteLine(DateTime.Now + "开始执行");
            Stopwatch watch = new Stopwatch();

            watch.Start();
            using (AutoResetEvent eventAuto = new AutoResetEvent(false))
            {
                foreach (var task in tasks)
                {
                    ThreadPool.QueueUserWorkItem(item =>
                    {
                        DO.SysTask curTask = (DO.SysTask)item;
                        if (curTask.TaskType == "InvokeService")
                        {
                            try
                            {
                                ISysTaskExecutor exec = SysTaskSettings.GetSettings().GetExecutor("InvokeService");
                                exec.Execute(curTask);
                            }
                            catch (Exception exx)
                            {
                                Debug.WriteLine("出现了意外的错误" + exx.ToString());
                            }
                            finally
                            {
                                int newCount = System.Threading.Interlocked.Increment(ref count);
                                Debug.WriteLine(DateTime.Now + "当前执行:" + newCount + "当前线程ID:" + Thread.CurrentThread.ManagedThreadId);
                                eventAuto.Set();
                            }
                        }
                    }, task);
                }

                int workerThreads, completionPortThreads;
                ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads);

                Debug.WriteLine("线程池可用线程数" + workerThreads);

                while (count != tasks.Count)
                {
                    eventAuto.WaitOne();
                }
            }

            watch.Stop();

            Debug.WriteLine(string.Format("耗时 {0}ms", watch.ElapsedMilliseconds));
            Debug.WriteLine(DateTime.Now + "主线程执行结束");
        }
Exemple #21
0
        internal static InvokeWebServiceJob CreateImmediateJob(string jobID, string name, string category, string url, string methodName, WfServiceOperationParameterCollection parameters)
        {
            InvokeWebServiceJob job = new InvokeWebServiceJob();

            job.JobID = jobID;
            job.Category = category;

            job.Name = name;
            job.SvcOperationDefs = new WfServiceOperationDefinitionCollection();

            WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, url);

            WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, methodName, parameters, string.Empty);

            serviceDef.Timeout = TimeSpan.FromSeconds(24 * 60 * 60);
            job.SvcOperationDefs.Add(serviceDef);

            return job;
        }
        //保存
        protected void btn_Save_Click(object sender, EventArgs e)
        {
            //错误信息
            StringBuilder error = new StringBuilder();

            if (this.Data == null && Request["id"] != null)
            {
                //根据ID获取任务对象
                //this.Data = (ETLJob)ETLJobAdapter.Instance.Load(Convert.ToString(Request["id"]));
                this.Data = JobBaseAdapter.Instance.Load(c => c.AppendItem("job_id", Convert.ToString(Request["id"]))).FirstOrDefault();
            }

            if (!Util.CheckOperationSafe())
            {
                return;
            }
            //ETL任务
            if (ddl_JobType.SelectedValue == "ETLService")
            {
                #region

                JobScheduleCollection pvc = new JobScheduleCollection();
                //计划列表
                if (ch_IsAuto.Checked)
                {
                    //pvc = JSONSerializerExecute.Deserialize<JobScheduleCollection>(schedules.Value);
                    pvc = GetSchedules(schedules.Value);
                }

                ETLEntityCollection etls = GetETLEntities(etlEntities.Value);

                ETLWhereConditionCollection wheres = JSONSerializerExecute.Deserialize <ETLWhereConditionCollection>(conditions.Value);
                if (this.Data != null)
                {
                    ETLJob job = ETLJobAdapter.Instance.Load(this.Data.JobID) as ETLJob;
                    this.Data       = job;
                    job.Category    = txt_jobCategory.Text;
                    job.Enabled     = ddl_Enabled.SelectedValue == "1" ? true : false;
                    job.JobType     = JobType.ETLService;
                    job.Description = txt_JobDescription.Text;
                    job.Name        = txt_JobName.Text;
                    job.Schedules   = pvc;
                    job.ETLEntities = etls;
                    job.IsAuto      = ch_IsAuto.Checked;
                    job.IsIncrement = ch_IsIncrement.Checked;
                    wheres.ForEach(w => { w.JOB_ID = this.Data.JobID; w.ID = Guid.NewGuid().ToString(); });

                    job.ETLWhereConditions = wheres;

                    if (CheckEtlEntities())
                    {
                        ETLJobOperations.Instance.DoOperation(EntityJobOperationMode.Update, job);
                    }
                }
                else
                {
                    ETLJob job = new ETLJob()
                    {
                        JobID       = Guid.NewGuid().ToString(),
                        Category    = txt_jobCategory.Text,
                        Enabled     = ddl_Enabled.SelectedValue == "1" ? true : false,
                        JobType     = JobType.ETLService,
                        Description = txt_JobDescription.Text,
                        Name        = txt_JobName.Text,
                        Schedules   = pvc,
                        ETLEntities = etls,
                        IsAuto      = ch_IsAuto.Checked,
                        IsIncrement = ch_IsIncrement.Checked
                    };
                    wheres.ForEach(w => { w.JOB_ID = job.JobID; w.ID = Guid.NewGuid().ToString(); });

                    job.ETLWhereConditions = wheres;

                    this.Data = job;
                    if (CheckEtlEntities())
                    {
                        ETLJobOperations.Instance.DoOperation(EntityJobOperationMode.Add, job);
                    }
                }
                if (string.IsNullOrEmpty(ErrorMsg))
                {
                    HttpContext.Current.Response.Write("<script>window.returnValue=true;window.close();</script>");
                    //this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", "window.returnValue=true;window.close()", true);
                }
                else
                {
                    //ViewState["conditions"] = conditions.Value;
                    ViewState["schedules"] = schedules.Value;
                    conditions.Value       = JSONSerializerExecute.Serialize((this.Data as ETLJob).ETLWhereConditions);

                    ViewState["etlEntities"] = etlEntities.Value;


                    //计划列表
                    List <ScheduleGridObj> scheduleList = new List <ScheduleGridObj>();
                    foreach (JobSchedule item in this.Data.Schedules)
                    {
                        scheduleList.Add(new ScheduleGridObj()
                        {
                            ID          = item.ID,
                            Name        = item.Name,
                            Description = item.Description
                        });
                    }
                    ViewState["schedulesGrid"] = JSONSerializerExecute.Serialize(scheduleList);;
                    grid.InitialData           = scheduleList;

                    //etl实体列表
                    List <EtlGridObj> etlJobs = new List <EtlGridObj>();
                    foreach (ETLEntity item in (this.Data as ETLJob).ETLEntities)
                    {
                        etlJobs.Add(new EtlGridObj()
                        {
                            ID          = item.ID,
                            CodeName    = item.Name,
                            Description = item.Description
                        });
                    }

                    ViewState["etlsGrid"] = JSONSerializerExecute.Serialize(etlJobs);
                    gridEtl.InitialData   = etlJobs;

                    string msg       = ErrorMsg.Replace("\r\n", string.Empty);
                    string scriptStr = string.Format("alert('{0}');", msg);
                    this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", scriptStr, true);
                    //HttpContext.Current.Response.Write(scriptStr);
                }
                #endregion
            }
            //WebService任务
            else
            {
                #region

                JobScheduleCollection pvc = new JobScheduleCollection();
                //计划列表
                if (ch_IsAuto.Checked)
                {
                    //pvc = JSONSerializerExecute.Deserialize<JobScheduleCollection>(schedules.Value);
                    pvc = GetSchedules(schedules.Value);
                }

                if (this.Data != null)
                {
                    InvokeWebServiceJob job = InvokeWebServiceJobAdapter.Instance.Load(w => w.AppendItem("Job_id", this.Data.JobID)).FirstOrDefault();// this.Data as InvokeWebServiceJob;
                    job.Category         = txt_jobCategory.Text;
                    job.Enabled          = ddl_Enabled.SelectedValue == "1" ? true : false;
                    job.JobType          = JobType.InvokeService;
                    job.Description      = txt_JobDescription.Text;
                    job.Name             = txt_JobName.Text;
                    job.Schedules        = pvc;
                    job.ISManual         = !ch_IsAuto.Checked;
                    job.SvcOperationDefs = JSONSerializerExecute.Deserialize <WfServiceOperationDefinitionCollection>(this.services.Value);
                    //入库
                    DoUpdate(job);
                }
                else
                {
                    InvokeWebServiceJob job = new InvokeWebServiceJob()
                    {
                        JobID            = Guid.NewGuid().ToString(),
                        Category         = txt_jobCategory.Text,
                        Enabled          = ddl_Enabled.SelectedValue == "1" ? true : false,
                        JobType          = JobType.InvokeService,
                        Description      = txt_JobDescription.Text,
                        Name             = txt_JobName.Text,
                        Schedules        = pvc,
                        ISManual         = !ch_IsAuto.Checked,
                        SvcOperationDefs = JSONSerializerExecute.Deserialize <WfServiceOperationDefinitionCollection>(this.services.Value)
                    };

                    this.Data = job;

                    //入库
                    DoUpdate(job);
                }
                if (string.IsNullOrEmpty(ErrorMsg))
                {
                    HttpContext.Current.Response.Write("<script>window.returnValue=true;window.close();</script>");
                    //this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", "window.returnValue=true;window.close()", true);
                }
                else
                {
                    //ViewState["conditions"] = conditions.Value;
                    ViewState["schedules"] = schedules.Value;
                    conditions.Value       = JSONSerializerExecute.Serialize((this.Data as ETLJob).ETLWhereConditions);

                    ViewState["etlEntities"] = etlEntities.Value;


                    //计划列表
                    List <ScheduleGridObj> scheduleList = new List <ScheduleGridObj>();
                    foreach (JobSchedule item in this.Data.Schedules)
                    {
                        scheduleList.Add(new ScheduleGridObj()
                        {
                            ID          = item.ID,
                            Name        = item.Name,
                            Description = item.Description
                        });
                    }
                    ViewState["schedulesGrid"] = JSONSerializerExecute.Serialize(scheduleList);;
                    grid.InitialData           = scheduleList;

                    //etl实体列表
                    List <EtlGridObj> etlJobs = new List <EtlGridObj>();
                    foreach (ETLEntity item in (this.Data as ETLJob).ETLEntities)
                    {
                        etlJobs.Add(new EtlGridObj()
                        {
                            ID          = item.ID,
                            CodeName    = item.Name,
                            Description = item.Description
                        });
                    }

                    ViewState["etlsGrid"] = JSONSerializerExecute.Serialize(etlJobs);
                    gridEtl.InitialData   = etlJobs;

                    string msg       = ErrorMsg.Replace("\r\n", string.Empty);
                    string scriptStr = string.Format("alert('{0}');", msg);
                    this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", scriptStr, true);
                }
                #endregion
            }
        }