Мне нужен ваш ценный совет на QUARTZ.NET. Я использую это планирование для запуска моей функции каждые 10 секунд. На самом деле мой код получает данные из json-файлов и сравнивает их с SQL-сервером базы данных. Если идентификатор соответствует базе данных, то он ничего не сделает, иначе он будет чирикать продукт. Некоторое время код успешно работает, я не получаю дубликатов записей. Но когда-нибудь он вставляет дубликаты в базу данных, и можно только пропустить существующий = (int) cmd.ExecuteScalar(); Скажите, пожалуйста, что делать. Потому что я не могу увеличить время графика с более чем 10 секунд. И как прекратить пропустить одну строку в этом. Ниже мой код. Это будет большой помощью для меня .. Пожалуйста, помогите. БлагодаряQuartz.NET пропускает шаги во время выполнения
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
// scheduler.ResumeAll();
IJobDetail job = JobBuilder.Create<SampleJob>()
.WithIdentity("currencyJob", "group1")
.Build();
// IJobDetail job = JobBuilder.Create<SampleJob>().Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithSimpleSchedule(s => s.WithIntervalInSeconds(15).RepeatForever())
.Build();
//ITrigger trigger = TriggerBuilder.Create()
// .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
// .Build();
scheduler.ScheduleJob(job, trigger);
и Sample.cs ниже
public void Execute(IJobExecutionContext context)
{
tweetmonitor();
}
public void tweetmonitor()
{
////////////////////////////////URLS And Proxy tables data get//////////////////////////////////
List<UrlKeyword> employee = new List<UrlKeyword>();
List<Proxy> proxy = new List<Proxy>();
List<ProductsJsonModel> json = new List<ProductsJsonModel>();
ProductsJsonModel json2 = new ProductsJsonModel();
SqlConnection conn = new SqlConnection(strConnString);
//SqlConnection conn = new SqlConnection(strConnString);
SqlCommand customer = new SqlCommand("select * from customer", conn);
SqlCommand cmdproxy = new SqlCommand("select * FROM ProxyTable", conn);
customer.CommandType = CommandType.Text;
try {
conn.Open();
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlDataReader rdr = customer.ExecuteReader();
while (rdr.Read())
{
UrlKeyword emp = new UrlKeyword();
emp.url = rdr["ContactName"].ToString();
emp.keywords = rdr["CompanyName"].ToString();
employee.Add(emp);
}
rdr.Close();
SqlDataReader rdrproxy = cmdproxy.ExecuteReader();
while (rdrproxy.Read())
{
Proxy pr = new Proxy();
pr.IP = rdrproxy["IP"].ToString();
pr.Port = Convert.ToInt32(rdrproxy["Port"]);
pr.UserName = rdrproxy["UserName"].ToString();
pr.PassWord = rdrproxy["PassWord"].ToString();
proxy.Add(pr);
}
rdrproxy.Close();
}
catch (Exception ex)
{
}
////////////////////////////////////////////////////////////////
///////////////////Checking from database/////////////////////////
///////////////////Checking from database/////////////////////////
foreach (var x in employee)
{
foreach (var m in proxy)
{
try
{
string url = x.url;
string keyword = x.keywords;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(x.url);
WebProxy myproxy = new WebProxy(m.IP, m.Port);
if (m.UserName != null && m.PassWord != null && m.UserName != "" && m.PassWord != "")
{
myproxy.Credentials = new NetworkCredential(m.UserName, m.PassWord);
}
myproxy.BypassProxyOnLocal = false;
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response != null)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
string mr = readStream.ReadToEnd();
/////////////////JSON Data///////////////////
if (x.url.Contains("json"))
{
//JSON files to twitter
try
{
ProductsJsonModel Data = JsonConvert.DeserializeObject<ProductsJsonModel>(mr);
List<Product> ProductsFromUrl = Data.products;
int countofloop;
countofloop = ProductsFromUrl.Count;
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
cmd.CommandText = "select IdJson from dbo.JsonDataPrimary";
cmd.Connection = conn;
da.SelectCommand = cmd;
da.Fill(ds, "JsonDataPrimary");
for (int s = 0; s < countofloop; s++)
{
int exist = 0;
// SqlCommand cmd = new SqlCommand();
cmd.CommandText = @"SELECT count(*) FROM dbo.JsonDataPrimary WHERE IdJson= '" + ProductsFromUrl[s].id + "'";
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = conn;
exist = (int)cmd.ExecuteScalar();
//////////////////////////duplicate check////////////////////////////////////
//////////////////////////////////////////////////////
// if (exist > 0)
if (checkDuplicateTitle(ds.Tables["JsonDataPrimary"].Rows, ProductsFromUrl[s].id.ToString()) && exist > 0)
{
///exit from here
}
else
{
string logstweetout = published_at + Environment.NewLine + product_title + Environment.NewLine + newurlimage;
string logsdata = published_at + Environment.NewLine + product_title + Environment.NewLine + newurlimage + Environment.NewLine + "Variants(According to size)" + Environment.NewLine + variantscheck + Environment.NewLine;
cmd.CommandText = @"INSERT INTO dbo.JsonDataPrimary VALUES('" + ProductsFromUrl[s].id + "','" + ProductsFromUrl[s].published_at + "','','' ,'" + test + "')";
cmd.CommandType = System.Data.CommandType.Text;
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
cmd.Connection = conn;
}
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
}
conn.Close();
}
Thankyou очень много указан .. Вы разгадали мой проблема ... Да благословит вас Бог –
@ArslanAhmad рад помочь, вы можете принять ответ тогда) – Set
Привет, Я хочу задать еще один вопрос. Из-за [DisallowConcurrentExecution] мое приложение выполняет всю работу за 30 секунд, но я устанавливаю таймер через 5 секунд. Можно ли параллельно запускать потоки. Среднее значение, когда триггер запускает класс задания образца, и через 5 секунд он снова запустится в Sample Sample, оба будут выполнять свою работу? –