Соединение с SignalR - SSL соединение не может быть установлено. Ошибка аутентификации, потому что удаленная сторона закрыла транспортный поток - PullRequest
0 голосов
/ 31 января 2020

У меня есть 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.

Мне интересно, нужно ли что-то делать для очистки после такого типа сбоя подключения?

...