C# 我的应用程序的编程设计体系结构

C# 我的应用程序的编程设计体系结构,c#,asp.net,architecture,C#,Asp.net,Architecture,我需要从asp.net网站一次发送多条SMS消息,还需要轮询POP3帐户以获取传入邮件,然后将这些消息发送给多个收件人,一次发送一条 我想这样做的方式是一个windows服务,它会连接到我的sql后端,查看是否有短信要发送,比如每10-20秒左右。如果是这样,请获取列表中的所有消息,从表中删除它们,然后继续发送它们 pop账户也是如此 关于如何在asp.net网页启动时(例如,添加到sql server的消息)最好地提供此服务而不导致网页阻塞,您有何想法 平台是windows server 20

我需要从asp.net网站一次发送多条SMS消息,还需要轮询POP3帐户以获取传入邮件,然后将这些消息发送给多个收件人,一次发送一条

我想这样做的方式是一个windows服务,它会连接到我的sql后端,查看是否有短信要发送,比如每10-20秒左右。如果是这样,请获取列表中的所有消息,从表中删除它们,然后继续发送它们

pop账户也是如此

关于如何在asp.net网页启动时(例如,添加到sql server的消息)最好地提供此服务而不导致网页阻塞,您有何想法

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


感谢您的建议。

我们已经使用SQL Server service broker的排队机制实现了类似的场景。其思想是,每个插入的SMS记录都被一个触发器捕获,该触发器将包含SmsID的消息插入ServiceBroker队列

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

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

与表中的标志相比,ServiceBroker队列的优点是线程安全。通过这种方式,您可以拥有任意数量的服务实例,而不必过于担心并发性问题


您可以在这里找到一个不错的Service Broker教程:

我们已经使用SQL Server Service Broker的排队机制实现了类似的场景。其思想是,每个插入的SMS记录都被一个触发器捕获,该触发器将包含SmsID的消息插入ServiceBroker队列

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

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

与表中的标志相比,ServiceBroker队列的优点是线程安全。通过这种方式,您可以拥有任意数量的服务实例,而不必过于担心并发性问题


您可以在这里找到一个不错的Service Broker教程:

您可以使用MSMQ(Microsoft Message queuing)来代替Sql Server进行排队

MSMQ非常容易设置,一旦安装并运行,它比Sql Server更具可扩展性

因此,您可以做的是在MSMQ中设置一个新队列,以接收您想要发送的消息。消息通常是描述消息、发送者和接收者的某种消息对象

然后,您可以设置一个定期轮询队列的服务,也可以设置MSMQ,以便在每次向队列发送新消息时启动您选择的类


如果需要邮件日志,则可以在发送邮件时让service/sender对象写入sql server中的日志

您可以使用MSMQ(Microsoft Message queuing),而不是使用Sql Server进行排队

MSMQ非常容易设置,一旦安装并运行,它比Sql Server更具可扩展性

因此,您可以做的是在MSMQ中设置一个新队列,以接收您想要发送的消息。消息通常是描述消息、发送者和接收者的某种消息对象

然后,您可以设置一个定期轮询队列的服务,也可以设置MSMQ,以便在每次向队列发送新消息时启动您选择的类


如果需要邮件日志,则可以在发送邮件时让service/sender对象写入sql server中的日志

如果您在2-3年前问过这个问题,我会推荐SQL Notification services,但现在已经知道它们只适用于SQL 2005标准。。。SQL 2008中不推荐使用Notification services,而MS gurus建议替换它们在Service Broker中提供的功能,因此我投+1票。如果您在2-3年前提出此问题,我会推荐SQL Notification services,但现在大家都知道,它们只适用于SQL 2005标准。。。SQL 2008中不推荐使用通知服务,而MS gurus建议替换它们在Service Broker中提供的功能,因此我投+1票