2009-08-14 74 views
0

我有一个从asp.net网站需要一次发送了许多短信,也轮询POP3帐户接收邮件,然后短信说出来给多个收件人,一个一次。编程设计架构我的应用程序

我想这样做的方式是一个窗口服务,将连接到我的SQL后端,看看是否有短信发送出去,每10-20秒左右等。如果是这样,请获取列表中的所有消息,将其从表中删除,然后继续发送出去。

与pop账户相同的方式。

如何最好地提供,而不会引起asp.net web页面阻断当它拉开序幕(例如添加到SQL Server消息)该项服务的想法吗?

平台是windows server 2003 R2,sql 2008标准,asp.net 3.5 SP1。

感谢您的建议。

回答

2

我们使用SQL Server服务代理的排队机制实现了类似的方案。这个想法是每个插入的SMS记录都被触发器捕获,该触发器将包含SmsID的消息插入到服务代理队列中。

然后您需要一个接收来自队列消息的存储过程。如果没有消息,程序将运行直到插入下一个条目。没关系,因为它不占用资源来收听队列。

接下来,您需要一个连续(递归地)调用STP的Windows服务,组装SMS并发送它。

服务代理的优点队列在表中的标志是线程安全的。这样,您可以拥有尽可能多的服务实例,因为您不必担心并发问题。

你可以在这里找到一个很好的服务代理教学课程:http://www.developer.com/db/article.php/3640771

+0

如果你问这个23年以前,我会建议SQL通知服务,但现在已经知道,他们将只能与SQL 2005标准工作...通知服务已被取消,2008年SQL和MS大师建议更换他们提供的服务代理功能,所以我投1 – 2009-08-14 06:49:14

1

而不是使用SQL Server作为排队,你可以使用MSMQ(微软消息队列)达到这一目的。

MSMQ很容易设置,一旦启动并运行,它比Sql Server更具可扩展性。

所以你可以做的是在MSMQ中设置一个新队列,它将接收你想发送的消息。该消息通常是某种描述消息,发件人和收件人的消息对象。

然后你要么设置,将每隔一定的时间队列的查询服务,或者你可以设置MSMQ开始每次有新邮件被发送到队列中的时间一类的选择。

如果你需要一个日志消息,你可以有服务/发送对象写入日志在SQL Server中发送邮件时。