У меня есть проект, содержащий процесс очистки данных с защищенного паролем веб-сайта.Процесс очистки данных настроен на задание кварцевого планировщика, которое запускается один раз в час.Когда я развертываю проект в сети, процесс работает нормально, но через 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);
}
}
}
}
Мне помогают создать этот код, поэтому я не очень хорошо знаю некоторую часть этого кода.Я подозреваю, что часть сокета.Я буду очень рад, если кто-то может помочь.