2017-07-26 3 views
1

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.

Antwort