JWTトークンを生成する際に、約30%の問題が発生することがあります。UserManager asp.netコア2.0:接続が閉じられませんでした。 'Connecting'
元のセットアップは、依存性注入を使用しているが、エラーの発見のために、私はUserManagerの「新鮮な」次のコードでのインスタンスを作成:
[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(電子メール)の30%にスローされます
ケース、および読み取り:
System.InvalidOperationException: '接続が閉じられませんでした。 接続の現在の状態が接続しています。
コンテキストが上記の行に作成されているため、このエラーはわかりません。以前の要求から完全にファイナライズされていないSQL Serverを検討してください。ただし、新しく起動すると頻繁に発生します。
情報の目的:私のコンテキスト:
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>();