Webserver中的线程/ Web服务

时间:2014-02-03 12:29:01

标签: c# asp.net .net multithreading scheduled-tasks

我想知道这是在服务器中创建后台任务以发送电子邮件的最佳方式。

这个想法是一个人出价一个项目,这会自动将邮件发送给负责任务的任务,它将邮件发送给通讯员,但我怎么能这样做而不影响网站功能或使其变慢。< / p>

我已经阅读了有关异步任务的一些内容,但不确定这是否是我问题的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以创建异步后台线程,查看其用法 .NET框架任务类,如果您在以前的版本中使用.NET 4.x. 你必须看看Thread或ThreadStart。 但要小心访问数据,以防止主线程和您的电子邮件 线程从遇到问题,你还需要看看锁定资源 用“锁定”声明。

这很好,如果您需要一次发送许多电子邮件,这应该完成 异步,这意味着“用户不必等待它”。 在网络中,这也是在线程中执行此类操作的最佳方式,就像您一样 如果花费的时间太长,可能会有一个请求超时。 但是,当然,在线程的最后,你应该以某种方式创建一个报告 并将其发送给执行用户,以便他知道邮件已经完成 或者如果发生任何错误。

我们通过创建负责的网络服务在我们公司解决了这个问题 用于将电子邮件发送到SMTP服务并记录它们,包括内容和 电子邮件发送状态。 我们的应用程序以我们的Web服务定义的格式构建电子邮件 他们负责最终用户的状态报告。

当然,通过这样做,您仍然需要一个可以构建的图层 您要发送的电子邮件,并将其转发给邮件服务,以及此信息 也许仍然需要做异步。所以只有转发到SMTP本身才会 与你的申请分开。

但是如果你有一个需要进行群发邮件的应用程序或类似的东西 并且您希望将其与“常规”工具分开(例如,用于分离流程 然后只需创建一个“知道”主应用程序域的单独服务。

通过这样做,您只需通过将主应用程序的相关信息发送到邮件服务来触发邮件服务。 但同样,也许你需要建立一个后台线程来收集和发送 该服务所需的信息。

您可以通过多种方式创建此服务,例如使用WCF作为带有消息入队的后台窗口服务,或带有其余API的基于HTTP的服务等等。

你没有提供关于你需要做什么的那么多信息,但也许这会 指向正确的方向。