none
Core api signalr kullanımı RRS feed

  • Soru

  • Core ile geliştirdiğim bir api projesine signalr servisi eklemek istiyorum. Microsoftun gösterdiği örnek ile api tarafında gerekli düzenlemeleri yaptım. React tarafında client hazırladım ve clientler arasında mesajlaşmayı sağladım. Fakat benim yapmak istediğim hub ile siparişler tablosunu yayınlamak ve bunu güncel tutmak. Bunu nasıl yapabilirim?
    7 Temmuz 2020 Salı 17:00

Yanıtlar

  • DbContext.cs

            private readonly IHubContext<MessageHub> _hubContext;
    
            public DbContext(DbContextOptions<DbContext> options, IHubContext<MessageHub> hubContext) 
                : base(options)
            {
                _hubContext = hubContext; 
            }
            public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
            {
                var entityTypes = new[] {
                typeof(Users),
                typeof(Orders), 
                };
    
                ChangeTracker
                    .Entries()
                    .ToList()
                    .ForEach(p =>
                    {
                        if (entityTypes.Contains(p.Entity.GetType()))
                        {
                            _hubContext.Clients.All.SendAsync("notify", p.Entity.GetType().Name);
                        }
                    });
                return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
            }

    Belirlediğim tablolarda bir değişiklik olursa cliente, tablonun değiştiği mesajını göndererek sorunum halledildi.
    Tekrar teşekkürler Önay hocam



    8 Temmuz 2020 Çarşamba 11:29

Tüm Yanıtlar

  • yazdığın kodları paylaş da admin konuyu kapatsın.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    8 Temmuz 2020 Çarşamba 10:20
    Moderatör
  • DbContext.cs

            private readonly IHubContext<MessageHub> _hubContext;
    
            public DbContext(DbContextOptions<DbContext> options, IHubContext<MessageHub> hubContext) 
                : base(options)
            {
                _hubContext = hubContext; 
            }
            public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
            {
                var entityTypes = new[] {
                typeof(Users),
                typeof(Orders), 
                };
    
                ChangeTracker
                    .Entries()
                    .ToList()
                    .ForEach(p =>
                    {
                        if (entityTypes.Contains(p.Entity.GetType()))
                        {
                            _hubContext.Clients.All.SendAsync("notify", p.Entity.GetType().Name);
                        }
                    });
                return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
            }

    Belirlediğim tablolarda bir değişiklik olursa cliente, tablonun değiştiği mesajını göndererek sorunum halledildi.
    Tekrar teşekkürler Önay hocam



    8 Temmuz 2020 Çarşamba 11:29
  • Orda sadece SaveChangesAsync'i override ettik, kodunda Async olmayan SaveChanges ler varsa aynı işi SaveChanges'i override ederek de yapabilirsin ya da en güzeli tümünü asynce e çevir bence.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    8 Temmuz 2020 Çarşamba 11:46
    Moderatör