【问题标题】:How to increase timeout setting in ASP.NET Core SignalR v2.1?如何在 ASP.NET Core SignalR v2.1 中增加超时设置?
【发布时间】:2018-10-24 12:00:45
【问题描述】:

我正在 ASP.NET Core 2.1 上试用最新的 SignalR。我有基本的应用程序工作,但现在很快就会超时。我看到了这个错误 -

错误:连接因错误“错误:服务器超时而未收到来自服务器的消息而断开。”。

在哪里可以更改此超时设置?我尝试了文档here,但没有关于超时的信息。 我在 Windows 10 的开发环境中运行并使用 JavaScript 客户端。

编辑:启用客户端日志记录后插入图像。

编辑 2:链接到 page,其中包含有关旧 SignalR 版本的超时。

【问题讨论】:

  • 我会先打开客户端日志,看看为什么你没有收到保持活动消息,
  • @davidfowl 我在启用日志记录后包含了屏幕截图。我让连接空闲几秒钟而不使用应用程序
  • @davidfowl 我在 Startup 中增加了 KeepAliveInterval 但无法增加 ServerTimeout - 这可能是由于此设置造成的吗?
  • 是的,这正是原因……你为什么要增加保活设置?
  • @MahmoudFarahat 这对我有用。我将在该链接中选择答案。这个问题现在将是重复的,但答案是上周更新的,所以我一开始找不到。

标签: c# signalr asp.net-core-2.0 asp.net-core-signalr


【解决方案1】:

对于未来可能来这里的人:

这里是增加 Javascript 客户端超时的方法

hubConnection.serverTimeoutInMilliseconds = 100000; // 100 second

But also take a look at this link 然后在下面阅读我的 cmets:

如果 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();

【讨论】:

  • 第二个链接坏了。
  • 是的,很遗憾,该链接不再有效。我用另一个有用的链接替换了那个链接。我希望这会有所帮助。
【解决方案2】:

在startup.cs中

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

【讨论】:

    【解决方案3】:

    以下内容对我有用。 将以下代码放入 Javascript 客户端。

    // Connecting to the signalR
    var connection = new signalR.HubConnectionBuilder().withUrl(huburl + hubname).build();
    
    // Setting the connection timeout
    connection.serverTimeoutInMilliseconds = 180000; // 3 mins
    

    【讨论】:

    • 这与this 其他答案有何不同?
    • 这是一回事。
    • 那么请避免发布其他用户已经给出的答案,除非您要添加更多信息。
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多