2010-09-29 159 views
1

我有一个数据录入和编辑表单,并且在每个数据录入或更新事件中,我都必须发送一封电子邮件给收件人的动态列表。一旦用户点击保存或编辑按钮,我一直在发送电子邮件,但我想先将数据保存到数据库,然后再发送电子邮件。我想这样做的部分原因是为了提高应用程序的响应时间,因为发送电子邮件往往需要很长的时间。将数据保存到SQL Server数据库中,然后再发送邮件

有没有人做过一些与此有关的事情,有没有一种更好的方式来实现类似的东西,或者知道一个很好的教程。

电子邮件正文为html格式。

+0

为什么发送需要很长时间?你发送给收件人吗?尝试将拾音器放入拾音器目录,然后从那里发送MTA。 – TomTom 2010-09-29 07:17:12

+0

TomTom - 我发送给收件人,我尝试异步发送,但那不是和idfference。 – StackTrace 2010-09-29 07:22:31

回答

1

我同意ck关于使用服务和消息队列,但也有一些替代方案。

一个是使用一个服务,定期轮询数据库。这可以让你避免消息队列的代价是更高的CPU负载(该服务将执行许多不必要的数据库调用)。

您也可以使用数据库触发器或数据库中的计划作业直接在数据库中执行此操作。最新版本的SQL Server支持运行用C#或Vb.Net编写的存储过程,因此您可以在这里重用大部分现有代码。

最后,你可以去一个简单的解决方案,你在asp.net应用程序的单独线程上发送电子邮件。这样可以避免使用服务应用程序,您可以像现在一样重复使用代码。

+0

符文格里姆斯塔德 - 我试着发送一个单独的线程在我的asp.net应用程序,但它如何没有任何区别 – StackTrace 2010-09-29 07:28:25

+0

我想我可能会认真考虑数据库触发器或数据库中的计划作业 – StackTrace 2010-09-29 07:30:07

+0

你是如何开始新线程?我认为它应该工作,如果你使用ThreadPool.QueueUserWorkItem方法。参考:http://haacked.com/archive/2009/01/09/asynchronous-fire-and-forget-with-lambdas.aspx – 2010-09-29 08:52:06

2

您可以编写一个处理发送电子邮件的Windows服务,然后使用Message Queue作为将数据从应用程序传递到服务的方法。即您的应用程序保存数据,然后向队列添加消息。该服务不断轮询队列中的消息,并将每个消息作为电子邮件发送。

+0

Orr你跳过消息队列(单独安装,通常不可用)并使用服务代理(在sql server中具有相同的功能)。 – TomTom 2010-09-29 07:16:49

0

执行此操作的一种方法是写入数据库,然后在通知电子邮件服务(写为Windows服务)的队列中放入一条消息,指出有电子邮件要发送。然后电子邮件服务与数据库进行交谈,以查找实际需要执行的操作。这将电子邮件服务从Web应用程序中分离出来,同时也避免了轮询。

这与ck的解决方案略有不同,因为队列消息被用作触发器而不是包含电子邮件信息。这在一定程度上解除了网络应用程序和电子邮件服务的分离,并且意味着电子邮件服务可以被多个客户端重复使用,而无需每个客户端都必须遵守(并且保持一致)相同的电子邮件格式。

相关问题