【问题标题】:I want sendmail delay process and I dont want to send the mail,if I am background thread that not sendmail after six days我想要 sendmail 延迟过程,我不想发送邮件,如果我是后台线程,六天后不发送邮件
【发布时间】:2013-10-18 16:19:27
【问题描述】:

我正在创建一个 ASP.NET .NET 4.0 网站,该网站的一部分要求有一个“始终运行”的应用程序。通常,我会为此创建一个 Windows 服务,但该站点将托管在共享托管环境中,除非我获得虚拟服务器,否则这是不可能的。

我的第一个想法是在后台运行一个线程来执行此操作,它将在 Application_Start 上创建并在 Application_End 上销毁。我环顾四周,这似乎是一个选项,但我当然必须点击该站点才能调用 Application_Start 并且如果关联的 AppPool 被回收,那么这个过程将不得不重复(所以我相信?!?)。

在一个普通的 ASP.NET 网站中,这些似乎是可能的吗?我正在开发一个 ASP.NET(带有 sql server)应用程序。

【问题讨论】:

  • 虽然启动后台线程可能可能,但它不会可靠。您确实需要向该站点发出第一个请求才能启动该后台线程。此外,它可以随时被主机系统(我假设是 IIS)关闭。 Web 应用程序不适合始终运行的后台进程。正如您所指出的,Windows 服务(或某种计划任务)是。
  • 查看您的主机是否允许您使用自动启动:weblogs.asp.net/scottgu/archive/2009/09/15/… 这将在任何用户尝试点击它之前尝试启动站点,包括您在 app_start 中创建的后台线程。跨度>
  • 我正在使用 go daddy 服务器...
  • 只需 cron/schedule 一个 web 请求来保持应用程序池的活动(尽管也有一个固定的回收生命周期)。当然,您需要另一台机器来执行此操作,周围有免费的在线机器。
  • 很高兴你们都回复我你的回答...

标签: c# asp.net .net


【解决方案1】:

您可以使用为执行此任务而生的ATrigger。与您的问题相关,您可以查看以下用例:

.Net library 也可用。

免责声明:我是构建触发器的团队之一。这是一个免费软件。

【讨论】:

    【解决方案2】:

    首先,您应该将您的电子邮件排队,可能在您数据库中的一个表中。请记住,您可以通过 Ms Sql Server (http://technet.microsoft.com/en-us/library/ms190307.aspx) 发送邮件,这是一种选择。

    另一种方法是您可以使用Quartz Net 调度程序。编写一个 MailingService 类并通过在 application_start 事件中初始化石英来运行它。您可以将其配置为每分钟运行一次并检查邮件队列并尝试发送,如果发送成功,则从队列中删除...即使您回收应用程序,您的邮件也不会丢失,因为它们在数据库中排队。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2013-03-31
      • 2019-05-27
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多