Я использую SignalR (1.0.3) для мгновенной визуализации push-уведомлений. Когда я вызываю строку с жестким кодом ...SendAsync("notifications-init", "Testing Message")
, она работает, но когда я заменяю строку методом ...SendAsync("notifications-init", _notificationService.GetNotifications())
, она выдает ошибку, даже если этот метод отлично работает в другом API. Так в чем же причина?
NotificationHub.cs
public class NotificationHub : Microsoft.AspNetCore.SignalR.Hub
{
private readonly NotificationService _notificationService;
public NotificationHub(
NotificationService notificationService
)
{
_notificationService = notificationService;
}
public async Task GetNotifications()
{
await Clients.All.SendAsync("notifications-init", _notificationService.GetNotifiations());
}
}
NotificationService.cs:
public IList<NotificationResponse> GetNotifiations()
{
IList<AccountNotification> notifications = _context.AccountNotification.AsNoTracking()
.Where(n => n.IsRead != true)
.Include(n => n.Notification)
.ToList();
return _mapper.Map<IList<NotificationResponse>>(notifications);
}
app.component.ts:
ngOnInit() {
this.connectToHub();
}
connectToHub() {
const options: any = {
transport: 0
};
this.hubConnection = new HubConnectionBuilder().withUrl('/signalr/notifications', options).build();
this.hubConnection
.start()
.then(() => {
console.log('Connection started!');
this.hubConnection.invoke('getNotifications')
.catch(err => console.log(err));
})
.catch(err => console.error('Error while establishing connection', err));
this.hubConnection.on('notifications-init', (data: any) => {
console.log(data);
});
}