Ist es möglich SignalR-Nachrichten direkt zur SQL-Backplane hinzuzufügen?

9

Ich würde gerne wissen, ob ich SignalR Nachrichten direkt an die SignalR SQL Backplane (von SQL) hinzufügen kann, also muss ich keinen SignalR Client dafür verwenden.

Meine Situation ist, dass ich eine gespeicherte Prozedur für eine SQL Service Broker-Warteschlange aktiviert habe, und wenn sie ausgelöst wird, möchte ich eine Nachricht an SignalR-Clients senden. Derzeit muss ich die Nachricht von SQL Service Broker in einem separaten Prozess erhalten und dann sofort die Nachricht mit einem SignalR-Hub erneut senden.

Ich möchte, dass meine aktivierte gespeicherte Prozedur die Nachricht im Grunde direkt auf die SignalR SQL Backplane überträgt.

    
Novox 29.05.2014, 14:14
quelle

1 Antwort

1

Ja und nein. Ich habe ein kleines Experiment auf meinem localhost eingerichtet, um festzustellen, ob es möglich ist - und es ist, wenn es richtig formatiert ist.

Nun ein Wort zum Schema [SignalR] . Es erzeugt drei Tabellen:

%Vor%

Richtig, also habe ich die letzte Spalte dupliziert, außer dass ich PayloadId (für den neuen Datensatz und in [Messages_0_Id] erhöht und in GETDATE() als Wert für InsertedOn eingegeben habe. Unmittelbar nach dem Hinzufügen des Datensatzes a Es wurde eine neue Nachricht in den verbundenen Client eingegeben Beachten Sie, dass PayloadId keine Identitätsspalte ist, daher müssen Sie sie manuell erhöhen, und Sie müssen diesen erhöhten Wert in den einzigen Datensatz in [Messages_0_Id] kopieren, anderenfalls können Ihre Signalclients dies nicht tun Verbindung wegen Signalr SQL-Fehlern.

Nun füllt der Trick die Spalte [Payload] richtig aus. Ein kurzer Blick auf die Tabelle zeigt, dass es wahrscheinlich binär serialisiert ist. Ich bin kein Experte für SQL, aber ich bin mir ziemlich sicher, dass eine binäre Serialisierung in Schwierigkeiten steckt. Wenn ich recht habe, ist dies der Quellcode für die binäre Serialisierung, die sich in Microsoft.AspNet.SignalR.Messaging.ScaleoutMessage befindet:

%Vor%

Mit WriteTo :

%Vor%

Also ist es nahezu unmöglich, das in einer gespeicherten Prozedur mit reinem SQL neu zu implementieren. Wenn Sie es auf dem SQL Server tun müssen, empfehle ich die SQL CLR-Funktionen . Eine Sache zu erwähnen, obwohl - Es ist einfach genug, eine Klassenbibliothek zu verwenden, aber wenn Sie den Aufwand auf lange Sicht reduzieren möchten, würde ich vorschlagen, ein SQL Server-Projekt in Visual Studio zu erstellen. Dies ermöglicht Ihnen die automatische Bereitstellung von CLR-Funktionen mit wesentlich mehr Leichtigkeit als das manuelle Kopieren der neuesten Klassenbibliothek auf den SQL Server. Auf dieser Seite erfahren Sie mehr darüber, wie Sie das tun können.

    
James Haug 12.11.2016 05:36
quelle