Hangfire 处理作业时出现 Null 异常
Null Exception when Job is handled by Hangfire
我的任务是每 30 分钟从 SQL 发送包含更新信息的邮件。
public void SendMail()
{
StringBuilder sb = new StringBuilder();
StringBuilder st = new StringBuilder();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString))
using (SqlCommand cmd = new SqlCommand("SELECT TITULO, DESTINATARIO FROM DIA", con))
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
sb.AppendLine(reader["TITULO"].ToString());
st.AppendLine(reader["DESTINATARIO"].ToString());
}
}
SmtpClient smtpClient = new SmtpClient("mysmtpclient.com", 25);
smtpClient.Credentials = new System.Net.NetworkCredential("________", "_______");
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
MailMessage mailMessage = new MailMessage("test@test.com", st.ToString());
mailMessage.Subject = "Documentos próximos do Vencimento";
mailMessage.Body = "Os seguintes documentos vencem em 5 dias: \n" + sb.ToString();
}
运行 直接从我的应用程序使用按钮可以正常工作,当我尝试使用以下命令使用 Hangfire 安排它时:
BackgroundJob.Schedule(() => SendMail(), TimeSpan.FromMinutes(30));
失败了,给我一个System.NullReferenceException。
可能是因为 MailMessage 和正文都是空的,这意味着它无法使用 Hangfire 从 SQL 服务器 table 检索数据。有什么建议吗?
我觉得应该是
BackgroundJob.Schedule<YOUR CLASS>((m) => m.SendMail(), TimeSpan.FromMinutes(30));
您必须指定您的 class 来识别方法。
我觉得这个 :
BackgroundJob.Schedule(() => <YOUR CLASS>.SendMail(), TimeSpan.FromMinutes(30));
但我认为 <your class>
和 SendMail()
必须是静态的。
我的任务是每 30 分钟从 SQL 发送包含更新信息的邮件。
public void SendMail()
{
StringBuilder sb = new StringBuilder();
StringBuilder st = new StringBuilder();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString))
using (SqlCommand cmd = new SqlCommand("SELECT TITULO, DESTINATARIO FROM DIA", con))
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
sb.AppendLine(reader["TITULO"].ToString());
st.AppendLine(reader["DESTINATARIO"].ToString());
}
}
SmtpClient smtpClient = new SmtpClient("mysmtpclient.com", 25);
smtpClient.Credentials = new System.Net.NetworkCredential("________", "_______");
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
MailMessage mailMessage = new MailMessage("test@test.com", st.ToString());
mailMessage.Subject = "Documentos próximos do Vencimento";
mailMessage.Body = "Os seguintes documentos vencem em 5 dias: \n" + sb.ToString();
}
运行 直接从我的应用程序使用按钮可以正常工作,当我尝试使用以下命令使用 Hangfire 安排它时:
BackgroundJob.Schedule(() => SendMail(), TimeSpan.FromMinutes(30));
失败了,给我一个System.NullReferenceException。
可能是因为 MailMessage 和正文都是空的,这意味着它无法使用 Hangfire 从 SQL 服务器 table 检索数据。有什么建议吗?
我觉得应该是
BackgroundJob.Schedule<YOUR CLASS>((m) => m.SendMail(), TimeSpan.FromMinutes(30));
您必须指定您的 class 来识别方法。
我觉得这个 :
BackgroundJob.Schedule(() => <YOUR CLASS>.SendMail(), TimeSpan.FromMinutes(30));
但我认为 <your class>
和 SendMail()
必须是静态的。