У меня AS PNet .Core WebApi, с signalR. У меня есть приложение angular, которое использует webAPI, и я хочу заменить его приложением Blazor Webassembly. У меня проблема с signalR в приложении Blazor.
Я создаю хаб-соединение, настраиваю его, и когда сервер отправляет данные, метод Hubconnection.On не вызывается. Вот мой код:
protected override async Task OnInitializedAsync()
{
_hubConnection = new HubConnectionBuilder()
.WithUrl("https://localhost:45299/hubs/accounthub", cfg =>
{
cfg.SkipNegotiation = true;
cfg.AccessTokenProvider = () => Task.FromResult(token);
cfg.Transports = HttpTransportType.WebSockets;
})
.Build();
_hubConnection.On<IEnumerable<AccountResponse>>("accountschanged", (accounts) =>
{
foreach(var account in accounts)
{
Console.WriteLine(account.Name);
}
});
await _hubConnection.StartAsync();
}
На вкладке сети я вижу, что соединение в порядке, я получаю новые данные, но метод в hubconnection.On не запускается. Я дважды проверил имя метода, и оно то же самое. В приложении angular он работает нормально, и когда данные отправляются с сервера, у меня нет проблем с серверным кодом.
Я использую Fluxor для управления состоянием и запускаю действие в Метод 'On', который я только что заменил, - это один Console.WriteLine для простоты.
Edit: добавлен серверный код и получено сообщение Вот код сервера, 'AccountsChanged' вызывается при изменении учетной записи:
public class AccountHub : Hub, IAccountHub
{
private readonly IHubContext<AccountHub> _accHub;
private readonly IAggregateMapper _mapper;
public AccountHub(IHubContext<AccountHub> accHub, IAggregateMapper mapper)
{
_accHub = accHub;
_mapper = mapper;
}
public async Task AccountsChanged(Guid userId, IEnumerable<Account> accounts)
{
var mapped = _mapper.MapAll<Account, AccountResponse>(accounts);
await _accHub.Clients.User(userId.ToString()).SendAsync("accountschanged", mapped);
}
}
И вот сообщение, которое я получаю (я делаю запрос от почтальона), скопированное из вкладки сети (для простоты я удалил дополнительные свойства учетных записей):
{
"type":1,
"target":"accountschanged",
"arguments":[
[
{
"id":1,
"name":"bank account 1"
},
{
"id":2,
"name":"wallet 1"
}
]
]
}