Wir arbeiten daran, Echtzeit-Push-Benachrichtigung Asp.net Web-Anwendung hinzuzufügen.Personalisierte Push-Benachrichtigung mit SignalR und SqlDependency
Ich bin in der Lage, eine Nachricht an alle Benutzer zu senden, die auf der Website angemeldet ist.
aber ich bin nicht in der Lage, Benachrichtigung an nur einen bestimmten Benutzer basierend auf dem Wert in der Datenbanktabelle eingefügt senden.
Wenn ich dies versuche, aktualisiert es alle Clients, die gerade angemeldet sind.
My Codebeispiel unten:
SqlDependency Komponente:
Public Sub RegisterNotification(ByVal currentTime As DateTime)
Try
Dim conStr = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Dim sqlCommand = "SELECT [seq_id],[user_id],[create_timestamp],[alert_read] FROM [dbo].[tblAlerts] WHERE [alert_read]=0 AND [create_timestamp] > @AddedOn"
Using con As New SqlConnection(conStr)
Dim cmd As New SqlCommand(sqlCommand, con)
cmd.Parameters.AddWithValue("@AddedOn", currentTime)
If con.State <> Data.ConnectionState.Open Then
con.Open()
End If
cmd.Notification = Nothing
Dim dependency As New SqlDependency(cmd)
AddHandler dependency.OnChange, AddressOf sqlDep_OnChange
Using reader As SqlDataReader = cmd.ExecuteReader()
Do nothing here
End Using
End Using
Catch ex As Exception
Throw ex
End Try
End Sub
Sub sqlDep_OnChange(ByVal sender As Object, ByVal e As SqlNotificationEventArgs)
Try
If e.Info = SqlNotificationInfo.Insert Then
Dim notificationHub = GlobalHost.ConnectionManager.GetHubContext(Of NotificationHub)
Dim userid = Membership.GetUser.ProviderUserKey
notificationHub.Clients.All.notify(userid)
End If
Dim depend = DirectCast(sender, SqlDependency)
RemoveHandler depend.OnChange, AddressOf sqlDep_OnChange
RegisterNotification(DateTime.UtcNow)
Catch ex As Exception
End Try
End Sub
Mitteilung Hub-Code
Public Class NotificationHub
Inherits Hub
Public Sub showdata(ByVal obj As Object)
Try
Dim userobj = obj
Dim notificationHub = GlobalHost.ConnectionManager.GetHubContext(Of NotificationHub)
Dim count = 0
take count from database for userid in the object
notificationHub.Clients.All.setcount(count)
Catch ex As Exception
End Try
End Sub
End Class
SignalR Js Code
Ich habe auch eine weitere Sache hier festgestellt, sqlDep_OnChange Ereignis wird mehr als einmal aufgerufen, wenn ich die Anwendung in mehr als einem Browser geöffnet habe.