Работа без кварцевого планировщика - PullRequest
0 голосов
/ 27 января 2019

У меня есть проект, содержащий процесс очистки данных с защищенного паролем веб-сайта.Процесс очистки данных настроен на задание кварцевого планировщика, которое запускается один раз в час.Когда я развертываю проект в сети, процесс работает нормально, но через 1 час, в следующий раз, он не может быть выполнен.

Я уверен, что использование кварцевого планировщика верно, потому что есть другая работа, выполненная без проблем.Я думаю, что проблема заключается в проблемах с сокетом, в которых я не очень хорош.

Вот код:

using Quartz;
using SMSGonder;
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace TMiddaa.Quartz
{
    public class Scout : IJob
    {
        static string baseUrl = "https://TargetWebSite.com";
        static string email = "xx@yy.com";
        static string password = "12345";
        static string requesttype = "login";
        static CookieContainer cookieContainer;

        public void Execute(IJobExecutionContext context)
        {
            cookieContainer = new CookieContainer();

            MakeWebRequest();

            requesttype = "download";
            MakeWebRequest();
        }

        public void MakeWebRequest()
        {
            StringBuilder postData = new StringBuilder();
            string url = "";
            string method = "GET";

            if (requesttype == "login")
            {
                postData.Append(String.Format("user={0}&", email));
                postData.Append(String.Format("password={0}&", password));
                postData.Append(String.Format("type=&"));
                postData.Append(String.Format("remember=1&"));
                postData.Append(String.Format("captcha="));
                method = "POST";
                url = "/ajax/login.ajax.php";                
            }
            else if (requesttype == "download")
            {
                url = "/somePage";
            }

            ASCIIEncoding ascii = new ASCIIEncoding();
            byte[] postBytes = ascii.GetBytes(postData.ToString());

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(baseUrl + url);
            request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
            request.Method = method;
            if (method == "POST")
            {
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = postBytes.Length;
            }
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
            request.CookieContainer = cookieContainer;


            if (method == "POST")
            {
                Stream postStream = request.GetRequestStream();
                postStream.Write(postBytes, 0, postBytes.Length);
                var response = (HttpWebResponse)request.GetResponse();
                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                postStream.Flush();
                postStream.Close();
            }
            else if (method == "GET")
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //sayfanın htmlini responseString'ten alabilirsiniz.
                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                response.Close();

                //Do stuff with responseString
            }
        }

        public int m_LastBindPortUsed = 5000;

        public IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
        {
            int port = Interlocked.Increment(ref m_LastBindPortUsed); //increment
            Interlocked.CompareExchange(ref m_LastBindPortUsed, 5001, 65534);
            if (remoteEndPoint.AddressFamily == AddressFamily.InterNetwork)
            {
                return new IPEndPoint(IPAddress.Any, port);
            }
            else
            {
                return new IPEndPoint(IPAddress.IPv6Any, port);
            }
        }
    }
}

Мне помогают создать этот код, поэтому я не очень хорошо знаю некоторую часть этого кода.Я подозреваю, что часть сокета.Я буду очень рад, если кто-то может помочь.

1 Ответ

0 голосов
/ 27 января 2019

Кварц имеет регистратор в комплекте.Вам просто нужно подключиться к нему, чтобы получить любое исключение, которое может возникнуть в вашем коде

Если вы используете .Net Core, перейдите на https://www.quartz -scheduler.net / documents / quartz-3.x / быстрозамороженных start.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...