我有一个ASP.NET 2.0 Web应用程序,应该允许发送电子邮件。我有一个Windows服务,可以立即发送电子邮件。我的Web应用程序根据一些模板组成电子邮件消息,并将其放入MSMQ中,服务从那里获取它。
问题在于,从模板中组成消息可能需要一些时间,我不希望用户在消息被组成并传递给服务时等待。
我考虑了一些后台进程,它将监听通知请求的内部队列。如果队列为空,则进程不执行任何操作,但是一旦消息出现,它就开始处理消息。我希望只有一个进程,以免创建大量线程。
目前,我的想法是编写任务计划程序,其中包含通知请求队列。当新项目添加到队列中时,调度程序会检查是否正在运行发送通知的进程。如果是,则仅将请求添加到队列中。否则,它会创建新线程,该线程将读取队列直到其为空并执行通知请求。
我的担忧是,我需要确保我的线程不会在ASP.NET完成响应客户端后死亡,因为它是我的线程的父线程。问题是什么是最佳方法来做到这一点(或者是否可能这样做)?
附言:如果IIS由于用户不活动而回收ASP.NET进程,则我的线程死亡是可以的。
问题在于,从模板中组成消息可能需要一些时间,我不希望用户在消息被组成并传递给服务时等待。
我考虑了一些后台进程,它将监听通知请求的内部队列。如果队列为空,则进程不执行任何操作,但是一旦消息出现,它就开始处理消息。我希望只有一个进程,以免创建大量线程。
目前,我的想法是编写任务计划程序,其中包含通知请求队列。当新项目添加到队列中时,调度程序会检查是否正在运行发送通知的进程。如果是,则仅将请求添加到队列中。否则,它会创建新线程,该线程将读取队列直到其为空并执行通知请求。
我的担忧是,我需要确保我的线程不会在ASP.NET完成响应客户端后死亡,因为它是我的线程的父线程。问题是什么是最佳方法来做到这一点(或者是否可能这样做)?
附言:如果IIS由于用户不活动而回收ASP.NET进程,则我的线程死亡是可以的。