ASP.NET CORE 2.1调试时服务器超时

Arh*_*nut 9 asp.net-core asp.net-core-signalr

'错误:服务器超时已过,没有收到来自服务器的消息.'.

我正在尝试调试一些服务器端代码,而当我这样做时,客户端会在不到一分钟的时间内断开连接.

我只使用SignalR与客户端通信,而没有控制器.

是否有任何设置可以禁用超时或至少使它比现在更长?

我的launchSettings.json:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:26793",
      "sslPort": 44386
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HTTPS_PORT": "44386"
      }
    },
    "Api": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Mah*_*hat 7

感谢@Arhire Ionut

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

hubConnection.serverTimeoutInMilliseconds = 100000; // 100 second
Run Code Online (Sandbox Code Playgroud)

这里有更多详细信息=> https://github.com/aspnet/Docs/issues/6885

  • 值得注意的是,即使有这个调整,如果你在 IIS 8.5+ 后面运行你的 SignalR 服务器,它是 websocket-aware 那么(如果我们假设 IIS 具有默认设置)IIS 将终止任何和所有 2 分钟不活动的 websocket 连接,不管您在 .serverTimeoutInMilliseconds 上指定的值。因此,为了在您的开发环境中获得最佳结果,请记住在您的开发机器中调整您的 IIS。 (2认同)

xei*_*ton 7

在另一个答案中提到的@MahmoudFarhat是正确的。但也请查看此链接,然后在下面阅读我的评论。

如果signalR断开连接,则应尝试重新建立连接。连接可能由于其他一些原因而断开,包括用户交换网络。例如,如果用户正在使用手机并连接到家庭/办公室Wifi,但先退出,然后再连接到蜂窝数据连接。

要重新连接,您可以使用以下命令(对我来说就像是一件吊饰):

// re-establish the connection if connection dropped
connection.onclose(() => setTimeout(startSignalRConnection(connection), 5000));
Run Code Online (Sandbox Code Playgroud)

在哪里startSignalRConnection

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

和连接是

const connection = new HubConnectionBuilder()
  .withUrl(connectionHub, options)
  .withHubProtocol(protocol)
  .build();
Run Code Online (Sandbox Code Playgroud)

  • 2020 年时间旅行者的更新:现在我们可以使用 [`.WithAutomaticReconnect()`](https://docs.microsoft.com/en-us/aspnet/core/signalr/dotnet-client?view=aspnetcore-3.1&tabs =视觉工作室#自动重新连接) (5认同)