public static async Task Excute(HttpJobItem item, string jobName = null, PerformContext context = null) { var mon = JobStorage.Current.GetMonitoringApi(); var processingJobs = mon.ProcessingJobs(0, int.MaxValue) .Where(o => o.Value.Job.Args[1].ToString() == jobName).ToList(); //如果任务没执行完,删除新的任务 if (processingJobs.Count() >= 2) { var removeId = processingJobs.Max(s => s.Key); RecurringJob.RemoveIfExists(removeId); BackgroundJob.Delete(removeId); return; } try { context.WriteLine(jobName); context.WriteLine(JsonConvert.SerializeObject(item)); var client = GetHttpClient(item); var httpMesage = PrepareHttpRequestMessage(item); var httpResponse = await client.SendAsync(httpMesage); HttpContent content = httpResponse.Content; string result = await content.ReadAsStringAsync(); context.WriteLine(result); } catch (Exception ex) { Logger.ErrorException("HttpJob.Excute", ex); context.WriteLine(ex.Message); } }
/// <summary> /// 添加周期性作业 /// </summary> /// <param name="jobItem"></param> /// <returns></returns> public bool AddHttprecurringjob(HttpJobItem jobItem) { try { RecurringJob.AddOrUpdate(jobItem.JobName, () => HttpJob.Excute(jobItem, jobItem.JobName, null), jobItem.Corn, TimeZoneInfo.Local); return(true); } catch (Exception ex) { Logger.ErrorException("HttpJobDispatcher.AddHttprecurringjob", ex); return(false); } }
/// <summary> /// 添加后台作业 /// </summary> /// <param name="jobItem"></param> /// <returns></returns> public bool AddHttpbackgroundjob(HttpJobItem jobItem) { try { BackgroundJob.Schedule(() => HttpJob.Excute(jobItem, jobItem.JobName, null), TimeSpan.FromMinutes(jobItem.DelayFromMinutes)); return(true); } catch (Exception ex) { Logger.ErrorException("HttpJobDispatcher.AddHttpbackgroundjob", ex); return(false); } }
public static HttpRequestMessage PrepareHttpRequestMessage(HttpJobItem item) { var request = new HttpRequestMessage(new HttpMethod(item.Method), item.Url); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(item.ContentType)); if (!item.Method.ToLower().Equals("get")) { if (!string.IsNullOrEmpty(item.Data)) { var bytes = Encoding.UTF8.GetBytes(item.Data); request.Content = new ByteArrayContent(bytes, 0, bytes.Length); } } return(request); }
public static async Task Excute(HttpJobItem item, string jobName = null, PerformContext context = null) { try { context.WriteLine(jobName); context.WriteLine(JsonConvert.SerializeObject(item)); var client = GetHttpClient(item); var httpMesage = PrepareHttpRequestMessage(item); var httpResponse = await client.SendAsync(httpMesage); HttpContent content = httpResponse.Content; string result = await content.ReadAsStringAsync(); context.WriteLine(result); } catch (Exception ex) { Logger.ErrorException("HttpJob.Excute", ex); context.WriteLine(ex.Message); } }
public static HttpClient GetHttpClient(HttpJobItem item) { var handler = new HttpClientHandler(); if (HangfireHttpJobOptions.Proxy == null) { handler.UseProxy = false; } else { handler.Proxy = HangfireHttpJobOptions.Proxy; } var HttpClient = new HttpClient(handler) { Timeout = TimeSpan.FromMilliseconds(HangfireHttpJobOptions.GlobalHttpTimeOut), }; if (!string.IsNullOrEmpty(item.BasicUserName) && !string.IsNullOrEmpty(item.BasicPassword)) { var byteArray = Encoding.ASCII.GetBytes(item.BasicUserName + ":" + item.BasicPassword); HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); } return(HttpClient); }