У меня есть API в приложении. NET Core 2.1, где я инициализирую соединение-концентратор SignalR в конструкторе контроллера. Концентратор SignalR находится в том же приложении, и я использую <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="1.1.0" />
в качестве зависимости Nuget для клиента SignalR (это зависимость для HubConnectionBuilder()
)
[Route("api/myapi")]
[ApiController]
public class MyController : ControllerBase
{
private DBContext _dbContext;
private IConfiguration _configuration;
private HubConnection _hubConnection;
public MyController(IConfiguration config, DBContext dbCtxt)
{
_dbContext = dbCtxt;
_configuration = config;
_hubConnection = new HubConnectionBuilder()
.WithUrl("https://myhostname/myHub")
.Build();
_hubConnection.Closed += async (error) =>
{
Log.Error("SignalR hub connection was closed - reconnecting. Error message - " + error.Message);
await Task.Delay(new Random().Next(0, 5) * 1000);
try
{
await _hubConnection.StartAsync();
}
catch (Exception ex)
{
Log.Error("Failed to restart connection to hub from MyController, following a disconnection: " + ex.Message + " " + ex.InnerException.Message);
}
};
InitializeConnection();
}
private async void InitializeConnection()
{
try
{
await _hubConnection.StartAsync();
}
catch (Exception ex)
{
Log.Error("Failed to start connection to hub from MyController: " + ex.Message + ", " + ex.InnerException.Message);
}
}
Удаленный браузер может успешно выполнить POST-запросы к API, однако после определенного периода времени (около 1 часа) я начинаю видеть следующие ошибки в журнале, и приложение вылетает:
2020-01-31 03:27:42.074 +00:00 [Error] Failed to start connection to hub from MyController: The SSL connection could not be established. Authentication failed because the remote party has closed the transport stream.
2020-01-31 03:27:44.228 +00:00 [Error] Failed connection handshake.
2020-01-31 03:27:50.196 +00:00 [Error] Failed connection handshake.
2020-01-31 03:27:56.209 +00:00 [Error] Failed connection handshake.
2020-01-31 03:28:03.048 +00:00 [Error] Failed connection handshake.
Что может вызвать это?
Обновление
Я заметил, что перед тем, как я начал получать ошибки Failed connection handshake
, произошла следующая ошибка. Это ошибка, которая передается моему обработчику событий _hubConnection.Closed
после неожиданного отключения:
2020-01-31 03:18:03.980 +00:00 [Error] SignalR hub connection was closed - reconnecting. Error message - The remote party closed the WebSocket connection without completing the close handshake.
Мне интересно, нужно ли что-то делать для очистки после такого типа сбоя подключения?