asp.net core blazor(server side)で、SignalR

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();
    }
}

まぁ、これが正しい方法かどうかは分からないけど・・・

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: asp.net core, Blazor, C#, dotnetcore, SignalR, 技術系 パーマリンク

asp.net core blazor(server side)で、SignalR への1件のコメント

  1. takezou のコメント:

    よく見たら、MSのサイトにDisposeの件は書いてありました。

    https://docs.microsoft.com/ja-jp/aspnet/core/blazor/lifecycle?view=aspnetcore-3.1

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください