2016-10-05 10 views
0

新しいメッセージやフレンドリクエストを受け取ったときのリアルタイム通知にSignalrを使用しています。表示すると、データベースの「HasBeenViewed」フィールドがtrueに変更されます。SignalrはSQLデータベースの更新を認識しません。

問題は、Signalrが新しい通知をチェックするときに、変更された "HasBeenViewed"フィールドが表示されない場合でも、それはまだ偽であると考えられることです。データベース自体では、HasBeenViewedが正しく変更されたことを確認できます。

Signalrのクエリは、新しいメッセージ/フレンドリクエストが追加されたか、削除されたかどうかを正しく認識します。 HasBeenViewedの更新された値は表示されません。

IISを再起動すると、最後にSignalrは更新されたHasBeenViewed値を表示し、通知を正しく表示します。ただし、新しい通知が送信されて表示された場合は、新しい通知の表示された状態を認識しないことに戻ります。

ここに通知チェックのコードを示します。 ASP.NETコアの使用。私はリポジトリから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); 

    } 

問題の内容がわかりません。私はそこに新しい情報を毎回得るのではなく、それをメモリに格納しているクエリーとシグナルハブの間にいくつかの相互作用があると推測していますが、修正するために何をすべきかはわかりません。任意のヘルプ

+1

SQLからのリアルタイム通知が必要な場合は、サービスブローカーをチェックアウトする必要があります。 –

答えて

0

ため

おかげSQLDependencyのトリガーを使用することなく、あなたの最良のオプションは、あなたがメッセージのステータスを取得することができ、そのように、クライアントにメッセージ状態を管理し、ただ、長期間の持続性をSQLデータベースを使用していますユーザーがログインしたときに、クライアントにすぐにアクセスできます。

関連する問題