Как передавать сложные объекты через SignalR в C#?

#c# #.net-5 #signalr-hub

Вопрос:

Мой рабочий сигнал ASP.NET Служба Windows Core 5 с простой строковой полезной нагрузкой (или еще большим количеством параметров типа значения) больше не работает, когда я изменяю ее на (простой) сложный объект («CommonMessage» в моем случае). Из того, что я прочитал, это должно сработать из коробки. Метод «SendCommonMessage» больше не вызывается, и я не получаю никаких ошибок. Что я упускаю? Нет ли способа отладить/отобразить ошибку? (В ASP.NET Служба вызывается приложением WPF Core 5.)

 public class CommonMessageHub : Hub
{
    public async Task SendCommonMessage(CommonMessage commonMessage)
    {
        await Clients.All.SendAsync("ReceiveCommonMessage", commonMessage);
    }
}

public class CommonMessage
{
    public int MessageType { get; set; }
    public int Id { get; set; }
    public string Text { get; set; }
}
 

Вызывающий абонент (приложение WPF) выглядит так:

 public class CommonMessageService
{
    public CommonMessageService(HubConnection connection)
    {
        _connection = connection;
        _connection.On<CommonMessage>("ReceiveCommonMessage", commonMessage => CommonMessageReceived?.Invoke(commonMessage));
    }

    private readonly HubConnection _connection;

    public event Action<CommonMessage> CommonMessageReceived;

    public async Task Connect()
    {
        await _connection.StartAsync();
    }

    public async Task SendCommonMessage(CommonMessage commonMessage)
    {
        await _connection.SendAsync("SendCommonMessage", commonMessage);
    }
}
 

введите описание изображения здесь

Комментарии:

1. Где вы на самом деле проводите мероприятие? CommonMessageReceived Как вы регистрируетесь ICommonMessageService ?

2. @Andy: Событие используется в ViewModel, и интерфейс в настоящее время не нужен, я удалил его. Я реализовал точную копию 1:1, которая использует строку, и она работает. Проблема должна заключаться в сложном объекте «CommonMessage». Метод SendCommonMessage() в приложении WPF вызывается, но вызов не достигает функции SendCommonMessage() в службе.

3. Есть ли у вас какие — либо признаки ошибки в журналах?

4. @Ihusaan: В каких журналах? Я добавил журнал обслуживания, если вы это имеете в виду. Правильно работает только «тестовый» концентратор (со строковой полезной нагрузкой), два других не работают.