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 : 0
Users Yesterday : 47
Users Last 7 days : 276
Users Last 30 days : 901
Users This Month : 573
Users This Year : 5687
Total Users : 100202
Views Today :
Views Yesterday : 51
Views Last 7 days : 321
Views Last 30 days : 1059
Views This Month : 657
Views This Year : 6821
Total views : 139267
Who's Online : 0
よく見たら、MSのサイトにDisposeの件は書いてありました。
https://docs.microsoft.com/ja-jp/aspnet/core/blazor/lifecycle?view=aspnetcore-3.1