C# .NET Core 3.1标识在Azure上登录花费的时间太长

C# .NET Core 3.1标识在Azure上登录花费的时间太长,c#,sql-server,azure,asp.net-core,asp.net-identity,C#,Sql Server,Azure,Asp.net Core,Asp.net Identity,我们已经构建了一个.NET核心3.1 MVC web应用程序。我们决定使用MS Identity Microsoft.AspNetCore.Identity和Microsoft.AspNetCore.Identity.UI。我们设计了所有的登录/用户管理工具。它在\Areas\Identity\Pages\Account中创建了Razor页面 我们需要一个与电子邮件地址无关的用户名。我们还需要扩展IdentityUser并添加FirstName等内容 \Areas\Identity\Pages\

我们已经构建了一个.NET核心3.1 MVC web应用程序。我们决定使用MS Identity Microsoft.AspNetCore.Identity和Microsoft.AspNetCore.Identity.UI。我们设计了所有的登录/用户管理工具。它在\Areas\Identity\Pages\Account中创建了Razor页面

我们需要一个与电子邮件地址无关的用户名。我们还需要扩展IdentityUser并添加FirstName等内容

\Areas\Identity\Pages\Account\Login.cshtml.cs中的这行代码给我们带来了麻烦。在本地机器上,使用本地数据库,它运行得很好。当我们推到Azure时,执行这一行需要30秒

var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: false);
事实上,任何使用_signInManager的操作都需要15-30秒。甚至像登出这样简单的事情

private readonly SignInManager<ApplicationUser> _signInManager;
我们认为这可能是因为我们在Azure上使用了一个低端托管层,所以我们把一切都提升了几个档次,投入了更多的资金,但仍然存在问题


这确实引起了一个问题。我愿意接受任何想法来纠正这一点。

结果是有人给了我一个想法,帮助我找到了导致减速的线索

应用见解。我在Azure上打开了它。。。登录,注销。。。深入了解正在发生的事情,并看到对(localdb)\mssqllocaldb的引用,它绝对不应该出现在生产服务器上

这让我相信NLog被错误配置了。事实证明,NLog被设置为将日志记录到.log文件中,但也将记录添加到数据库中的表中

在本地开发人员机器上,它将正确地记录到本地数据库。但在Azure上,它还将尝试登录到服务器=(localdb)\mssqllocaldb;当然它够不着。花了30秒左右的时间才超时

删除具有NLog post到(localdb)\mssqllocaldb的引用;修正了减速问题。现在登录和注销都很快

这并不像看上去的那样是微软的身份识别解决方案。而是日志记录和错误配置的NLog导致了问题

我想我需要更仔细地了解应用程序洞察。我的印象是,对我的用户行为进行数据挖掘只是一些垃圾短信。我想我大错特错了


这里的教训是,它似乎是微软的身份解决方案,但事实上,每次使用身份时都会发生错误的日志记录。

我看到了你的reddit帖子,您看到了吗:请注意发布模式下的部署和最后一条评论,尝试ADO.Net而不是ASP标识,以确认这是瓶颈。感谢您的评论。我尝试了发布模式,并改变了一些部署配置——所有这些似乎都没有帮助。原来这是Nlog中的一个错误配置。谁会猜到呢?所有证据都指向_signInManager.PasswordSignInAsync。原来是在_signInManager.PasswordSignInAsync附近发生的日志记录。
public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string UserType { get; set; }

    public int OrganizationID { get; set; }

    public DateTime? CreatedOn { get; set; }

    public string NPINumber { get; set; }
}