由Hangfire处理Job时发生Null异常

时间:2018-10-01 17:59:03

标签: sql asp.net 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 Server表中检索数据。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我认为应该是

BackgroundJob.Schedule<YOUR CLASS>((m) => m.SendMail(), TimeSpan.FromMinutes(30));

您必须指定您的类以标识方法。

答案 1 :(得分:1)

我认为这是一个

BackgroundJob.Schedule(() => <YOUR CLASS>.SendMail(), TimeSpan.FromMinutes(30));

但是我<your class>SendMail()必须是静态的。