SimonMiler
@SimonMiler
Junior

SignalR вызывает метод OnDisconnectedAsync после остановки приложения, а не после отключение пользователя?

У меня есть Hub у которого переопределены методы OnConnectedAsync и OnDisconnectedAsync, метод
OnConnectedAsync вызываеться правильно, а вот OnDisconnectedAsync вызываеться не после фактического отключения пользователя, а после того как я закрываю приложение, но если я в ручном режиме закрываю соединение на клиенте вызовом метода connection.stop() то все работает нормально
Возможно кто-то сталкивался с подобной проблемой и знает её решение, хотелось бы узнать решение этой проблемы :)

Hub
private readonly ILogger<NotifyHub> logger;
        private readonly ApplicationContext applicationContext;

        public NotifyHub(ILogger<NotifyHub> logger , ApplicationContext applicationContext)
        {
            this.logger = logger;
            this.applicationContext = applicationContext;
        }

        public override async Task<Task> OnConnectedAsync()
        {
            return base.OnConnectedAsync();
        }

        public override async Task<Task> OnDisconnectedAsync(Exception ex)
        {
            return base.OnDisconnectedAsync(ex);
        }
    }


Startup
public partial class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }
        public string ConnectionString { get; private set; }

        public void ConfigureServices(IServiceCollection services)
        {
            ConnectionString = Configuration.GetConnectionString("DefaultConnection");

            InitDbContext(services);
            InitTransient(services);

            services.AddAutoMapper(typeof(Startup));
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseCors("CorsPolicy");

            app.UseSwagger();
            app.UseSwaggerUI(op =>
            {
                op.SwaggerEndpoint("/swagger/v1/swagger.json", "HourBoosting WEB API");
                op.RoutePrefix = "docs";
            });

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapHub<NotifyHub>("/api/hub/notify");
            });
        }
    }
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы