Ist es möglich, SignalR in Kombination mit SqlCacheDependency (oder SqlDependency) zu verwenden, um Datenbankaktualisierungen direkt an den Browser zu senden? Vielleicht gibt es eine andere Möglichkeit, diese Funktionalität zu erreichen? Das einzige, was ich jetzt funktioniere, ist, dass ich addMessage von dem asynchronen Aufruf aufrufen muss, der eine Aktualisierung der Datenbank durchführt, aber das deckt nicht wirklich die Aktualisierungen von verschiedenen Quellen ab (zum Beispiel ein Hintergrunddienst, der die Tabelle aktualisiert)).Verwenden von SignalR mit SqlDependency, um Datenbankaktualisierungen zu übertragen
Antwort
Ok, ich es herausgefunden, oder zumindest eine Möglichkeit, es zu tun.
Was ich anfangs nicht verstanden habe, ist, dass Sie diesen Code innerhalb eines MVC Controllers verwenden müssen, sobald Sie das getan haben, können Sie diesen Controller natürlich auch von jedem anderen Ort oder von jeder anderen Anwendung aus aufrufen WebRequest Klasse.
@Hightechrider Um der Vollständigkeit halber, müssen Sie 2 weitere Verweise einschließen, um dieses Stück Code arbeiten zu lassen. Dieser Demo-Code wurde mit einer PersistentConnection erstellt, aber das Prinzip für den Hub ist natürlich dasselbe.
EDIT: Ich benutze jetzt einen Thread in meinem asp.net mvc, um die sqldependency zu verwalten, das fühlt sich an wie eine integrierte Lösung. prüfen diesen Beitrag auf, wie die Hintergrundverarbeitung in asp.net „den richtigen Weg“ http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SignalR.Infrastructure;
using SignalR.Hosting.AspNet;
using SignalR;
namespace SignalRDemo.Controllers
{
public class DemoController : Controller
{
public void sendMessage(string message)
{
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
IConnection connection = connectionManager.GetConnection<MyConnection>();
connection.Broadcast(message);
}
}
}
Sie sollten the OnChange event on a SQLDependency verwenden können. In Ihrem Event-Handler können Sie eine Nachricht über SignalR senden. Da Sie von außen in die Hub-Aufruf werden Sie brauchen die Technik at the bottom of the documentation here gezeigt verwenden:
using SignalR.Infrastructure;
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
...
Gerade FYI umzusetzen, planen wir eine ScaleOut Lösung zu implementieren, basierend auf SQL diesen Mechanismus verwenden. – davidfowl
- 1. Daten von SQL Server an Webanwendung mit SignalR übertragen
- 2. Wie SqlDependency und SignalR mit 2 verschiedenen Datenbanken mit einer Funktion in C# verwenden?
- 3. Verwenden von Redis mit SignalR
- 4. Was zu verwenden, um zwei. NET-Programme Informationen zu übertragen
- 5. Telnet verwenden, um eine Datei vom/zum Server zu übertragen
- 6. Verwenden Sie Vorlagenfunktion, um zwischen mehreren Klassen sicher zu übertragen
- 7. Unveröffentlichte Datenbankaktualisierungen in Mongo
- 8. SqlDependency mit EntityFramework 6 (async)
- 9. SqlDependency Reliablität?
- 10. force signalr, um Benutzer wieder zu autorisieren
- 11. Wie generische Hub in SignalR zu verwenden
- 12. SqlDependency wird sofort ausgelöst
- 13. Wie cron und rsync zu verwenden, um Dateien von Remote-Server auf lokalen Pfad zu übertragen
- 14. SqlDependency vs SqlCacheDependency
- 15. Mit SqlDependency mit dem Namen Queue
- 16. Weiter auf SQLDependency hören
- 17. wie Jax-rs Rest Service mit Cordova Plugin zu übertragen, um Daten zu übertragen
- 18. SqlDependency nicht Cache-Aktualisierung
- 19. Um Daten in URL zu übertragen
- 20. Verwenden von SQLDependency im Gegensatz zu periodischen Abfragen einer Tabelle (Leistungseinfluss)
- 21. Verwenden von DTS, um Datenbankschema zu übertragen, wo Tabellen mehrere Besitzer haben
- 22. Übertragen von Daten mit CoreBluetooth
- 23. Bash-Skript mit scp, um eine Datei zu übertragen gesucht
- 24. sql Server Änderungsbenachrichtigung und SqlDependency
- 25. SignalR mit symmetrischer Verschlüsselung
- 26. Können wir NDK verwenden, um WiFi Probe Request-Pakete mit einer bestimmten SSID zu übertragen?
- 27. Übertragen von Datei mit WCF
- 28. Gibt es eine Möglichkeit, Pipe zu verwenden, um nur einen Parameter in das Skript zu übertragen?
- 29. SignalR mit MVC
- 30. Wie benutze ich lftp um segmentierte Dateien zu übertragen?
Warum müssen Sie die SQL-Abhängigkeit in einem separaten Prozess überwachen? Sie könnten es einfach in einem Thread überwachen, der unter ASP.NET ausgeführt wird, es sei denn, es gibt Gründe für eine Infrastruktur, warum Ihre Website Ihre Datenbank nicht direkt überwachen kann. In jedem Fall sollten Sie die neue ASP.NET-Web-API besser verwenden, wenn Sie eine solche API verwenden möchten, und Sie sollten es wahrscheinlich zu einer HttpPost-API machen, um zufällige (oder böswillige) Aufrufe einfach durch einen Besuch zu verhindern eine Internetseite. –
@Hightechrider thx für Ihre Antwort, ich habe geplant, Authentifizierung zu implementieren, um böswillige Verwendung zu verhindern, aber ein Beitrag wäre wahrscheinlich immer noch besser zu verwenden. Ich bin nicht sicher, wie man einen getrennten Thread von innerhalb meiner asp.net mvc Anwendung beginnt, an welchem Punkt sollte ich den Faden anfangen (ich denke in Application_start von globalem asax, aber ich bin nicht sicher) –
Ja, es startend in Global.asax ist typisch. Natürlich kann der AppPool im Leerlauf heruntergefahren werden (aus diesem Grund benötigen Sie normalerweise einen Dienst), aber in Ihrem Fall ist es egal, ob niemand die Site nutzt (durch SignalR oder auf andere Weise), ob die Datenbank aktualisiert wird. –