web-dev-qa-db-ja.com

ASP.NET Core SignalR v2.1でタイムアウト設定を増やす方法は?

ASP.NET Core 2.1で最新のSignalRを試しています。基本的なアプリは動作していますが、すぐにタイムアウトします。このエラーが表示されます-

エラー:エラー「サーバーからのメッセージを受信せずにサーバーのタイムアウトが経過しました。」で接続が切断されました。

このタイムアウト設定はどこで変更できますか?私はドキュメントを試しました here が、タイムアウトに関する情報はありません。私はWindows 10の開発環境で実行しており、JavaScriptクライアントを使用しています。

編集:クライアントのロギングを有効にした後の画像の挿入。

enter image description here

編集2:古いSignalRバージョンに関するタイムアウトを含む page へのリンク。

8
user3165209

将来ここに来るかもしれない人々のために:

JavaScriptクライアントのタイムアウトを増やす方法は次のとおりです

hubConnection.serverTimeoutInMilliseconds = 100000; // 100 second

しかし、このリンクも見てください そして、以下の私のコメントを読んでください:

SignalRが切断された場合は、接続を再確立してください。接続は、ユーザー切り替えネットワークなど、他のいくつかの理由で切断される可能性があります。たとえば、ユーザーが携帯電話を使用していて、自宅/オフィスのwifiに接続しているが、ステップアウトすると、携帯電話のデータ接続に接続する場合。

再接続するには、以下を使用できます(私にとっては魅力のように機能します)。

// re-establish the connection if connection dropped
connection.onclose(() => setTimeout(startSignalRConnection(connection), 5000));

ここで、startSignalRConnectionは:

const startSignalRConnection = connection => connection.start()
  .then(() => console.info('Websocket Connection Established'))
  .catch(err => console.error('SignalR Connection Error: ', err));

そして接続は

const connection = new HubConnectionBuilder()
  .withUrl(connectionHub, options)
  .withHubProtocol(protocol)
  .build();
6
xeiton

startup.cs

services.AddSignalR(hubOptions =>
            {
                hubOptions.EnableDetailedErrors = true;
                hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(60);
            })
0
D.Oleg