Search code examples
c#azureasp.net-coresignalr

SignalR - Change server timeout response


I've created a SignalR application but when I set the KeepAliveInternal and ClientTimeOutInterval a value in the hub configuration, the application ignores it and always sets it to "30,000ms" for both.

public void ConfigureServices(IServiceCollection services)
{
   services.AddRazorPages();
   services.AddSignalR().AddHubOptions<ActivityHub>(options => {
      options.ClientTimeoutInterval = TimeSpan.FromMinutes(30);
      options.KeepAliveInterval = TimeSpan.FromMinutes(15);
   });
}

I've read the SignalR Net Core docs and there is no limit for these two properties. The timeout always is "30,000" even though I set those to different values.


Solution

  • when i set the KeepAliveInternal and ClientTimeOutInterval a value in the hub configuration, the application ignore it and always set to "30,000ms" for both.

    For SignalR JavaScript client, the default serverTimeoutInMilliseconds value is 30,000 milliseconds (30 seconds). If you set KeepAliveInterval of HubOptions with a value > 30 seconds, but not specify an appropriate value for serverTimeoutInMilliseconds of HubConnection on client side, the connection will be terminated with an error, like below.

    enter image description here

    To fix it, you can try to set serverTimeoutInMilliseconds of your HubConnection, like below.

    var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub")
        .configureLogging(signalR.LogLevel.Trace)
        .build();
    
    connection.serverTimeoutInMilliseconds = 120000;
    

    Test Result

    enter image description here

    Note:

    In my above test, I configure SignalR hubs with below code snippet, and we can find a ping message is sent automatically per 60s.

    hubOptions.ClientTimeoutInterval = TimeSpan.FromMinutes(2);
    hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);