asp.net core blazor(server side)でSignalRのテストをしてみた。同じプロジェクト中にHubを作成して簡易チャットを作成。
接続や処理要求は良いのだが、問題が1つ。それは、ページを閉じたり、ページから移動した時にHub側で切断イベント(OnDisconnectedAsync)が発生しないこと。色々調べたんだけど、結局、クライアント側のアプリから明示的に切断しないと発生しないみたい。
Keepaliveとかのタイマー値をいじってみたが、つながっているのに切断イベントが上がったり・・・
多分、クライアントとHub双方で値を調整しなければいけないんだろうね。
じゃぁ、「ページ閉じた時に明示的に切断したれと」思い、blazorページにIDisposableインターフェースをImplementしてDisposableメソッドを定義、その中で明示的に切断するようにしたら、Hub側でイベントが発生するようになりました。
@implements System.IDisposable
・・・
//
// ページ破棄時に明示的にSignalRを切断してみる
//
void IDisposable.Dispose() {
// conはHubConnectionのインスタンス
// 明示的に接続を破棄
con.DisposeAsync();
}
}
まぁ、これが正しい方法かどうかは分からないけど・・・




Users Today : 15
Users Yesterday : 7
Users Last 7 days : 176
Users Last 30 days : 998
Users This Month : 661
Users This Year : 6766
Total Users : 101281
Views Today : 18
Views Yesterday : 8
Views Last 7 days : 210
Views Last 30 days : 1164
Views This Month : 768
Views This Year : 8078
Total views : 140524
Who's Online : 0
よく見たら、MSのサイトにDisposeの件は書いてありました。
https://docs.microsoft.com/ja-jp/aspnet/core/blazor/lifecycle?view=aspnetcore-3.1