0

J'utilise Signalr pour les notifications en temps réel lorsque vous recevez un nouveau message ou une demande d'ami, et lorsque vous les affichez, le champ "HasBeenViewed" devient true dans la base de données. Le problème est que lorsque Signalr vérifie les nouvelles notifications, il ne voit pas le champ "HasBeenViewed" modifié, il pense qu'il est encore faux. Dans la base de données elle-même, je peux confirmer que HasBeenViewed a été modifié correctement.Signalr ne reconnaissant pas les mises à jour de la base de données SQL.

La requête dans Signalr reconnaît correctement si une nouvelle demande de message/ami a été ajoutée ou si elle a été supprimée. Il ne voit tout simplement pas la valeur mise à jour pour HasBeenViewed.

Si je redémarre IIS, Signalr voit enfin la valeur HasBeenViewed mise à jour et affiche les notifications correctement. Toutefois, si une nouvelle notification est envoyée et affichée, il revient à ne pas reconnaître le statut affiché sur les nouvelles notifications.

Voici mon code pour la vérification de la notification. Utilisation de ASP.NET Core J'interroge depuis un référentiel vers une base de données MS SQL.

public void NotificationCheck(string userName) 
    { 

     var user = _repo.Query<ApplicationUser>().Where(u => u.UserName == userName).Include(u => u.FreindRequests).Include(u => u.Messages).FirstOrDefault(); 


     var messageCount = user.Messages.Where(m => m.HasBeenViewed == false).Count(); 

     var friendRequests = user.FreindRequests.Where(f => f.HasBeenViewed == false).Count(); 

     Clients.Caller.notificationCount(friendRequests + messageCount); 

    } 

Je ne sais pas quel est le problème. Je suppose qu'il y a une certaine interaction entre la requête et le concentrateur signalr où il est stocké dans la mémoire au lieu d'obtenir la nouvelle information à chaque fois, mais je ne suis pas sûr de ce qu'il faut faire pour le réparer.

Merci pour toute aide

+1

Si vous voulez des notifications en temps réel de SQL, vous devriez vérifier courtier de service. –

Répondre

0

Sans l'aide de déclencheurs de SqlDependency, votre meilleure option est de gérer l'état du message dans le client, et il suffit d'utiliser la base de données SQL pour la persistance à long terme, de cette façon vous pouvez obtenir l'état des messages lorsque l'utilisateur se connecte, et vous avez un accès immédiat à l'état dans le client.