Ich entwickelte diese Anwendung unter VB.net 2010
und SQL 2008
.
Ich wollte, dass die Clients für Updates auf der db benachrichtigt werden, und die Anwendung verwendet, um die db für Änderungen in der angegebenen Minute mit einem Timer zu überprüfen, die wirklich nicht effizient ist. Ich lese über query notification
, sqldependency
, service broker
, aber dann habe ich gelesen, dass sie möglicherweise nicht effizient sein, wenn ich 100 Clients habe und ich benutze Abfragebenachrichtigungen, um Benachrichtigungen an meine Anwendung zu senden.
Würde jemand helfen, was ich tun soll, und wie ich es tun kann (wäre wirklich hilfreich, wenn Beispiele verfügbar sind). Danke im Voraus!Ich möchte, dass meine Datenbank (SQL) Updates an die Clientanwendung sendet oder sendet
Antwort
Abfragebenachrichtigung wird an einen Service Broker-Dienst weitergeleitet, nicht direkt an Ihre Anwendung. Siehe The Mysterious Notification, um zu verstehen, wie es funktioniert. Ihre Anwendung wartet auf Benachrichtigungen, indem sie eine WAITFOR(RECEIVE)
Anweisung in der Datenbank ablegt. Dies bedeutet, dass jeder der 100 Clients einen SQL Server-Arbeitsthread belegt (die Beschränkungen unterliegen, siehe max worker threads
Option). Ich habe gesehen, dass dies in der Produktion mit +1000 Clients funktioniert (nachdem ich die Option max worker threads gestoßen habe), aber ich würde gegen empfehlen.
Meine Empfehlung wäre eine Service-Überwachung für die Änderung, mit SqlDependency/QueryNotifications. Dieser Dienst würde dann Benachrichtigungen beispielsweise mit WCF an alle Ihre laufenden Apps senden. Sie würden generische Änderungen (the table Foo was changed
) abonnieren, nicht zu bestimmten (the row x in table Foo was inserted
).
Als allgemeine Regel SqlDependency/Query Notifications können Sie nur informieren, dass Daten geändert haben, aber es wird nicht die neuen Daten schieben. Die Anwendung muss ihre lokalen Datasets aktualisieren, indem sie die Abfragen erneut ausführt, sobald sie benachrichtigt werden.
Seien Sie vorsichtig mit Klasse - es hat die problems mit Speicherlecks. Hovewer, Sie können eine Open-Source-Realisierung der SqlDependency-Klasse verwenden - SqlDependencyEx. Es verwendet einen Datenbankauslöser und eine native Service Broker-Benachrichtigung, um Ereignisse zu den Tabellenänderungen zu empfangen. Dies ist ein Anwendungsbeispiel:
int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME))
{
sqlDependency.TableChanged += (o, e) => changesReceived++;
sqlDependency.Start();
// Make table changes.
MakeTableInsertDeleteChanges(changesCount);
// Wait a little bit to receive all changes.
Thread.Sleep(1000);
}
Assert.AreEqual(changesCount, changesReceived);
Mit SqlDependecyEx Sie können nur UPDATE überwachen, DELETE und INSERT zu vermeiden. Hoffe das hilft.
- 1. PHP Formular sendet alles an die Datenbank außer Bild
- 2. Meine Senden-Schaltfläche sendet nichts an die Steuerung
- 3. Ajax sendet die Daten nicht an meine PHP-Datei
- 4. .NET GridView Update sendet keine UserID an die SQL-Abfrage
- 5. Spring Data Repository sendet null als Bytea an PostgreSQL-Datenbank
- 6. Formular mit $ _POST sendet leere Werte an die Datenbank
- 7. Wie kann ich verhindern, dass Backbone.js die OPTIONS-Anfrage sendet?
- 8. Wie kann ich die Telegramm-Nachrichten sendet an die URL herauszufinden, dass ich als Webhook gesetzt
- 9. Winkelmesser sendKeys sendet nichts an die Textbox
- 10. mobile Software, die Textnachricht in die Datenbank einfügt und sendet
- 11. getopts sendet meine Optionen nicht an den Standardausgang
- 12. Angular.js sendet an viele Beiträge
- 13. Wie verhindere ich, dass ASP.Net einen Standardzeichensatz sendet?
- 14. PHP-Skript sendet die E-Mail nicht nach Formular sendet
- 15. WPF sendet schnelle Befehle an externe Hardware
- 16. Lokale Datenbank oder dienstbasierte Datenbank beim Erstellen einer WPF-Clientanwendung
- 17. Warum sendet AT86RF231 meine Daten nicht?
- 18. PHP E-Mail sendet nicht an AOL
- 19. Meine Methode sendet HTML statt Excel-Datei
- 20. PyQt5 sendet ein Signal an QMediaPlayer
- 21. Python: logging.streamhandler sendet keine Protokolle an stdout
- 22. Verhindern, dass Browser Formulardaten erneut sendet
- 23. Sendet Daten von Java/Erlang an Ada
- 24. JVM sendet Speicher zurück an OS
- 25. Javascript sendet Daten an ActionResult, die zurückgeben RedirectToAction
- 26. Server sendet keine Daten an Clients
- 27. Sendet Amazon S3 Ungültigmachungssignale an CloudFront?
- 28. Wie man opencv Videos an ffmpeg sendet
- 29. MVC 5 sendet Integer an Modell
- 30. iOS sendet Parameter an Selektor mit NSTimers