ASP.NET Core 2.1で最新のSignalRを試しています。基本的なアプリは動作していますが、すぐにタイムアウトします。このエラーが表示されます-
エラー:エラー「サーバーからのメッセージを受信せずにサーバーのタイムアウトが経過しました。」で接続が切断されました。
このタイムアウト設定はどこで変更できますか?私はドキュメントを試しました here が、タイムアウトに関する情報はありません。私はWindows 10の開発環境で実行しており、JavaScriptクライアントを使用しています。
編集:クライアントのロギングを有効にした後の画像の挿入。
編集2:古いSignalRバージョンに関するタイムアウトを含む page へのリンク。
将来ここに来るかもしれない人々のために:
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();
startup.cs
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(60);
})