Не доходит запрос до хаба. WebSocket ASP.NET Core

Рейтинг: 0Ответов: 2Опубликовано: 26.08.2023

Суть проблемы - запрос с клиента не доходит до WebSocket хаба.


Метод отправки запроса:

async SendPublicRSAKey(rsaKey: SendRSAPublicKeyDTO) {
    await this.HubConnection.send("SendRSAKeys", rsaKey);
}

Билдер подключения:

this.HubConnection = new HubConnectionBuilder()
        .configureLogging(signalR.LogLevel.Debug)
        .withUrl("http://localhost:5172/schatHub", {
            skipNegotiation: true,
            transport: signalR.HttpTransportType.WebSockets
        })

Метод на стороне сервера:

public async Task SendRSAKeys(RSAKeyDTO rsaKey)
    {
        TradeKeys insertedKey = mapper.Map<TradeKeys>(rsaKey);
        insertedKey.id = Guid.NewGuid().ToString();
        insertedKey.nDataJson = JsonSerializer.Serialize(rsaKey.nData);
        insertedKey.eDataJson = JsonSerializer.Serialize(rsaKey.eData);
        await tradeKeyService.AddNewRSAKey(insertedKey);
        return;
    }

Конфигурация SignalR дополнительно не настраивалась, лишь

builder.Services.AddSignalR();

Никаких ошибок нет ни в браузере, ни на сервере.

При тестировании заметил, когда я отправляю весь объем данных, запрос не доходит. Когда же я отправляю 1-2 свойства из всего объекта, 500 байт +-, запрос доходит. Я игрался с конфигурацией, пытался настроить StreamBufferCapacity, MaximumReceiveMessageSize и т.д, но это не дало результата.

Ответы

▲ 0Принят

Проблема была в том, что DTO классы на стороне клиента и сервера различались.

На стороне клиента у меня был объект с такими свойствами:

s: number[]
n: number[]

На стороне сервера:

public s: string { get; set; }
public n: string { get; set; }

Сопоставив отправляемый обект с сервером, запрос дошел до сервера.

▲ 0

В SignalR, поверх WebSockets есть ограничения на передачу данных в одном объекте, как от сервера клиенту, так и от клиента к серверу. И рекомендуемый размер это 32 kb. Если будет заметно больше, то сообщения просто могут не передаваться.