SignalR - регистрация серверной части, получающей запрос на соединение и терпящей неудачу - PullRequest
0 голосов
/ 13 июня 2019

Проблема в том, что SignalR (версия 1.0.8) периодически не может подключиться к бэкэнду по причинам, которые мы не понимаем.

Я хотел бы зарегистрировать тот факт, что клиент попытался подключиться и почему произошел сбой в бэкэнде.

Я смог добавить интерфейс , используя Microsoft Docs (все примеры ниже непосредственно оттуда). Код переднего конца выглядит следующим образом и работает:

 public startConnection = () => {
    try {
      this.hubConnection = new signalR.HubConnectionBuilder()
        .withUrl(environment.apiEndpoint + '/eventhub')
        .configureLogging(this.backendLogger)
        .build();
....

Выше приведен вывод в консоли (или там, где я хочу войти), который выглядит следующим образом (не важно, только для контекста):

ОТЛАДКА: Запуск HubConnection.backend-logger.service.ts: 15

ОТЛАДКА: Начало соединения с форматом передачи «Текст». backend-logger.service.ts: 15

ОТЛАДКА: Отправка запроса на переговоры: http://localhost:54622/api/eventhub/negotiate. backend-logger.service.ts: 15

ОТЛАДКА: Выбор транспорта «WebSockets». backend-logger.service.ts: 15

TRACE: (транспорт WebSockets) Подключение. backend-logger.service.ts: 15

ИНФОРМАЦИЯ: WebSocket подключен к ws: // localhost: 54622 / api / eventhub? Id = 1dQb2mby4ikkeG8cBmog-g. backend-logger.service.ts: 15

ОТЛАДКА: Отправка запроса на рукопожатие. channel.service.ts: 90 присоединился

Мне нужно что-то вроде этого на бэкэнде:

Клиент x попытался подключиться

Соединение не удалось, потому что y

Я не вижу способа войти из бэкэнда, если я не инициирую соединение из бэкэнда (пример из документации, а не из моего кода):

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/my/hub/url")
    .ConfigureLogging(logging =>
    {
        // Log to the Console
        logging.AddConsole();

        // This will set ALL logging to Debug level
        logging.SetMinimumLevel(LogLevel.Debug);
    })
    .Build();

Я не делаю ничего подобного в своем коде (так как я запускаю соединения с клиента), единственная настройка SignalR, которую я установил в .NET, это services.AddSignalR(); в моем Startup.cs файле. Я предполагаю, что конечная точка negotiate определена где-то внутри библиотеки SignalR, но мне НУЖНО регистрировать получение клиентского запроса на подключение и сбой в случае сбоя, как мне это сделать? Middleware - мой единственный вариант? Это кажется совершенно неверным подходом к этому.

...