Проблема в том, что 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 - мой единственный вариант? Это кажется совершенно неверным подходом к этому.