【问题标题】:UserManager asp.net Core 2.0: Connection was not closed. 'Connecting'UserManager asp.net Core 2.0:连接未关闭。 '连接'
【发布时间】:2017-10-08 08:52:12
【问题描述】:

在生成 JWT 令牌时,我遇到了一个持续存在的问题,大约 30% 的情况。

原来的设置是使用依赖注入,但是为了发现错误,我在下面的代码中实例化了 Usermanager 'fresh':

[AllowAnonymous]
[Route("token")]
public async Task<BaseResult> Token(string email, string password)
{
    if (email == null) return new BaseResult(BaseResult.ResultCodes.InvalidInput, "not a user");
    //var user = await UserManager.FindByNameAsync(email);
    using (UserManager<User> usermanager = new UserManager<User>(new UserStore<User>(new UserContext()), null,
        new PasswordHasher<User>(), null, null, null, null, null, null))
    {
        User user = await usermanager.FindByEmailAsync(email);
        if (user == null)
            return new BaseResult(BaseResult.ResultCodes.NotFound, "user not found");

        if (usermanager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, password) !=
            PasswordVerificationResult.Success)
            return new BaseResult(BaseResult.ResultCodes.InvalidInput, "password incorrect");

        var token = await GetJwtSecurityToken(user);

        return new TokenResult(new JwtSecurityTokenHandler().WriteToken(token), token.ValidTo);
    }
//{
    //    token = new JwtSecurityTokenHandler().WriteToken(token),
    //    expiration = token.ValidTo
    //});
}

在 usermanager.FindByEmailAsync(email) 30% 的情况下会抛出异常,内容如下:

System.InvalidOperationException: '连接没有关闭。这 连接的当前状态是正在连接。'

由于上下文是在上面的行中创建的,这个错误我不明白。考虑到 SQL 服务器尚未完全从先前的请求中完成,尽管它在新启动时最常发生。

信息目的:我的背景:

public sealed class UserContext:IdentityDbContext<User>
{
    public UserContext()
    {
        Database.EnsureCreatedAsync();
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .UseSqlServer($"Server =PC; Database =PFUsers; Trusted_Connection = True;MultipleActiveResultSets=true;");



        base.OnConfiguring(optionsBuilder);
    }
}

虽然绕过了调试,但是在使用DI时,相关的启动部分是:

services.AddEntityFrameworkSqlServer()
    .AddDbContext<UserContext>(ServiceLifetime.Scoped);



services.AddIdentity<User, IdentityRole>()
    .AddEntityFrameworkStores<UserContext>();

【问题讨论】:

    标签: c# asp.net-core asp.net-core-2.0


    【解决方案1】:

    移除 MultipleActiveResultSets=true;从连接字符串解决它。

    对于令牌请求,MARS 会适得其反(单个请求的开销)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2019-07-27
      相关资源
      最近更新 更多