问题
我有一个Web服务,可以在数据库中保存记录,有时会向一组用户发送通知电子邮件,让他们知道发生了一个事件。
我从客户端收到 不常见的 超时错误。由于数据已提交到数据库,我认为我的问题是发送SMTP服务器发送电子邮件所花费的时间比客户端上的超时时间长。
需要
我需要做的是在后台发送电子邮件或将其添加到某种队列中以便稍后发送并返回。
约束
观
我已经看过几个解决方案,但需要指出哪种方式最好。
在#2下,我看过J eff Atwood's use of the HttpRuntime.Cache to simulate a windows service,但我非常关注警告
您需要非常小心运行任务的长度。 每个新任务都是一个新的工作线程,并且数量有限 那些 - 因为它“借用”来自托管线程池的线程。
无响应的网页比我试图解决的错误更糟糕。
我应该去哪个方向?
网络服务代码
[WebMethod(CacheDuration = 0)]
public static string SaveRecord(comRecord record, IList<QIData> qiItems)
{
using (WebDatabase db = new WebDatabase())
{
db.SaveRecord(record, qiItems, UserId, ComId);
if (qiItems.Count>0)
{
/*Then somehow invoke or queue the routine
db.SendQINotice(record,UserId, (int)ComId));
*/
}
}
}
答案 0 :(得分:1)
有趣 - 有几种方法可以做到这一点,但由于您在网站上,我会在数据库中的电子邮件队列中添加一个条目,并让另一个任务发送电子邮件。然后,如果您需要在不减慢网站速度的情况下,您可以自由地对电子邮件发送进行更好的错误处理。例如,您可以为此类应用程序添加一些“瞬态”错误处理。如果你对这种方法感兴趣,我可以在我的响应中添加“瞬态”错误处理程序,我用它来重试异常以克服一些临时错误条件。