代码之家  ›  专栏  ›  技术社区  ›  Grant Sanders

ASP。NET核心标识重定向在使用postgres时中断?

  •  0
  • Grant Sanders  · 技术社区  · 3 年前

    我有一个小型Blazor Server应用程序,通过EntityFramework 7与Asp.net Core Identity一起运行。我一直在使用SQL服务器,直到今天我尝试切换托管提供商。当我尝试对实体框架的NpgSql数据连接器执行完全相同的操作时,应用程序的行为非常奇怪。当我登录时,结果是成功的,但从MVC重定向回Blazor应用程序的时间会超时。如果我刷新页面,我仍然在登录页面上,但现在已经登录,可以正常使用应用程序。我的问题可能是什么?

    我会分享更多的代码,但唯一的区别是

    builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer("<string>"));
    

    builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseNpgsql("<string>"));
    

    我的第一个想法是EfCore的某些部分仍在尝试使用Sql服务器数据提供程序,但为什么我会在刷新时正确登录呢?

    编辑:刚刚发现了另一个症状——显然,所有blazor函数(状态更改、方法重定向)现在都不起作用了。这就像没有加载blazor.server.js文件,但它 正确加载,并且没有发生JS错误。感觉我在这里快要疯了。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Grant Sanders    3 年前

    编辑

    原来我在程序的其他地方遇到了线程问题。我在用这个代码

    currentUser = UserManager.FindByNameAsync(authState.User.Identity.Name).Result;
    

    我曾经用过。Result(),而不是等待该方法认为它将同步运行——我现在意识到这是一种糟糕的做法,就像使用一样。Result()是一个等待发生的死锁。不知怎的,当使用实体框架的SQL Server数据提供程序时,这段代码很好——我的猜测是,SQL Server的冷启动时间比我现在使用的Postgres服务器快一点,正因为如此,该方法只需要多花几分之一秒的时间——然后就陷入了死锁。

    我重构了代码以正确地等待方法,现在一切都很完美。