2009-08-14 7 views
0

Ich habe die Notwendigkeit von einer asp.net-Website, um viele SMS-Nachrichten auf einmal zu senden, und auch ein POP3-Konto für eine eingehende Mail abfragen, und dann SMS an viele Empfänger, eins zu einer Zeit.Programmierung Design-Architektur für meine Anwendung

Die Art, wie ich darüber nachdenke, ist ein Windows-Dienst, der mit meinem SQL-Back-End verbinden würde, um zu sehen, ob es SMS-Nachrichten gibt, wie etwa alle 10-20 Sekunden. Wenn dies der Fall ist, rufen Sie alle Nachrichten in einer Liste ab, löschen Sie sie aus der Tabelle, und senden Sie sie anschließend weiter.

Gleicher Weg mit dem Pop-Konto.

Irgendwelche Ideen, wie man diesen Dienst am besten bereitstellen kann, ohne Blockierung in der asp.net-Webseite zu verursachen, wenn sie gestartet wird (z. B. Nachrichten, die dem SQL-Server hinzugefügt wurden)?

Plattform ist Windows Server 2003 R2, SQL 2008 Standard, ASP.net 3.5 SP1.

Vielen Dank für Ihren Rat.

Antwort

2

Wir haben ähnliche Szenarien mithilfe des Warteschlangenmechanismus von SQL Server Service Broker implementiert. Die Idee besteht darin, dass jeder eingefügte SMS-Datensatz von einem Auslöser abgefangen wird, der eine Nachricht, die die SmsID enthält, in die Service-Broker-Warteschlange einfügt.

Sie benötigen dann eine gespeicherte Prozedur, die Nachrichten aus der Warteschlange empfängt. Wenn keine Nachrichten vorhanden sind, wird Ihre Prozedur ausgeführt, bis der nächste Eintrag eingefügt wird. Das ist in Ordnung, da es keine Ressourcen benötigt, um die Warteschlange anzuhören.

Als nächstes benötigen Sie einen Windows-Dienst, der kontinuierlich (rekursiv) das STP aufruft, die SMS zusammenstellt und versendet.

Der Vorteil der Service Broker Queue über eine Flagge in einer Tabelle ist Threadsicherheit. Auf diese Weise können Sie so viele Instanzen Ihres Dienstes haben, wie Sie möchten, ohne sich um Nebenläufigkeitsprobleme kümmern zu müssen.

Sie können einen schönen Service Broker tutoial finden Sie hier: http://www.developer.com/db/article.php/3640771

+0

Wenn Sie dies vor 2-3 Jahren gefragt, würde ich SQL-Notification-Dienste empfehlen, aber jetzt ist bekannt, dass sie nur mit SQL 2005-Standard arbeiten ... Notification-Dienste sind in SQL 2008 veraltet und MS Gurus empfiehlt, das zu ersetzen Funktionalität, die sie mit Service Broker bereitstellen, also stimme ich +1 –

1

Statt einen SQL-Server für die Warteschlangen verwenden Sie MSMQ (Microsoft Message Queuing) für diese nutzen könnten.

MSMQ ist ziemlich einfach einzurichten und sobald es in Betrieb ist, ist es skalierbarer als Sql Server.

Sie könnten also eine neue Warteschlange in MSMQ einrichten, die die Nachrichten empfängt, die Sie senden möchten. Die Nachricht würde normalerweise eine Art Nachrichtenobjekt sein, das die Nachricht, den Absender und den Empfänger beschreibt.

Dann würden Sie entweder einen Dienst einrichten, der die Warteschlange regelmäßig abfragt, oder Sie könnten MSMQ einrichten, um eine Klasse Ihrer Wahl jedes Mal zu starten, wenn eine neue Nachricht an die Warteschlange gesendet wird.

Wenn Sie ein Protokoll der Nachrichten benötigen, können Sie das Service-/Absenderobjekt in einen sql-Server zum Anmelden schreiben lassen, wenn die Nachricht gesendet wurde.

Verwandte Themen