Blazorアプリケーションのアプリケーションプールを停止すると "Application attempting to reconnect to the server" メッセージが表示されアプリケーションが操作不能になる現象の紹介です。
現象
Blazorアプリケーションのアプリケーションプールを停止すると以下のメッセージが表示されます。
メッセージ
Application attempting to reconnect to the server: n of 8
このメッセージが表示されるとアプリケーションが操作不能になります。
再現手順
Blazorアプリケーションのページにアクセスします。
今回利用しているアプリケーションは
こちらの記事で紹介しているテキストボックスの値を取得するアプリケーションです。
テキストボックスに値を入力してボタンをクリックして画面を変更します。
サーバーでこのBlazorアプリケーションのアプリケーションプールを停止します。
アプリケーションプールを停止するとすぐに、下図の"Application attempting to reconnect to the server"のメッセージが表示されます。
メッセージがページ全体にオーバーレイ表示されるため、テキストボックスの入力やボタンのクリックなどのページの操作ができなくなってしまいます。
停止したアプリケーションプールを起動して再開します。
アプリケーションプールを起動すると、"Application attempting to reconnect to the server"のメッセージが、
"Could not reconnect to the server. Reload the page to restore functionality."に変わります。
ページをリロードするか、メッセージの[Reload]リンクをクリックするとページが再表示できますが、入力したテキストボックスの値などは初期状態に戻ってしまいます。
通信状況(WebSocketの場合)
ページ表示時の状態です。
WebSocketの接続が開かれメッセージが受信されている動作を確認できます。
アプリケーションプールを停止すると、
"Error: Connection disconnected with error 'Error: WebSocket closed with status code: 1006 (no reason given).'."
のメッセージが返り、WebSocketが閉じられます。
その後、negotiateのPOSTリクエストが出ますが、503レスポンスが返り、"Error: Failed to complete negotiation with the server"のレスポンスが返ります。
アプリケーションプールを再開すると、再度通信が始まりますが、セッション情報が失われているためか、元の状態には戻りません。
通信状況(ロングポーリングの場合)
ページ表示時の状態です。
アプリケーションプールを停止すると、503レスポンスが返り、"Application attempting to reconnect to the server"のメッセージが表示されます。
アプリケーションプールを再開すると、再度通信が始まりますが、セッション情報が失われているためか、元の状態には戻りません。
対処法
Blazorアプリケーションの仕様のため、アプリケーションプールを停止した場合には、アプリケーションプールの再開後にページの再読み込みは必須です。
一方で、サーバーとの接続が切断された場合に全画面のオーバーレイのポップアップメッセージを表示しない方法はあります。
- 切断時のオーバーレイのメッセージを表示しない方法はこちらの記事を参照してください。
- 切断時のメッセージを変更したい場合はこちらの記事を参照してください。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-03-05
作成日: 2023-03-01