【问题标题】:Azure Failover Groups and IdentityDbContextAzure 故障转移组和 IdentityDbContext
【发布时间】:2017-10-16 23:13:30
【问题描述】:

我们的数据库的 Azure 故障转移组和 IdentityDbContext(AspNet 身份)存在一个奇怪的问题。

如果我将连接字符串设置为故障转移组,我会在日志中收到登录失败错误,但是如果我直接连接到主服务器或辅助服务器,则登录成功。

另一个奇怪的部分是,这似乎只发生在 IdentityDbContext 中。如果我只使用普通的 DB 上下文进行测试,登录可以正常使用故障转移组连接字符串,如果我使用新的 SqlConnection,它也可以正常工作,但是当我尝试使用 IdentityDbContext -> 登录失败。

我知道从 SSMS 连接到故障转移组时,您需要指定默认数据库,因为它无法访问主数据库,但在我的连接字符串中我指定了一个数据库,所以我不确定这是否可能是问题。

有没有其他人遇到过这种情况?我觉得奇怪的是这只会发生在我自己身上。

这是在 .NET 4.6.1 中使用最新版本的 Microsoft.AspNet.Identity (2.2.1)

【问题讨论】:

    标签: c# azure asp.net-identity high-availability failover


    【解决方案1】:

    根据你的描述,我自己做了一个测试demo,效果不错。

    我使用故障转移组url作为连接字符串,它可以成功登录和注册用户。

    我猜你可能设置了错误的连接字符串。

    我建议你可以按照下面的连接字符串再次测试。

    Server=tcp:{yourfailover group name}.database.windows.net,1433;Initial Catalog={the database name};Persist Security Info=False;User ID={user name};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
    

    我还使用身份 2.2.1 和 net 4.6.1 MVC 应用程序。

    【讨论】:

    • 抱歉回复晚了,确实是连接字符串的样子,所以不能解决问题。
    【解决方案2】:

    最后我发现了这个问题,感谢这篇博文:

    http://www.morganskinner.com/2014/04/optimizing-aspnet-identity-database.html

    尽管从技术上讲,这篇博文与故障转移组无关,但它确实指出 IdentityDbContext 会检查 sys.databases 和其他在故障转移组中不可用的“主”数据库操作。

    所以它使用普通 DBContexts 和 SqlConnections 的原因是因为这些隐藏检查没有被执行。一个

    由于我不需要 IdentityDbContext 进行这些检查,只需将基本调用的第二个参数设置为 false 以绕过此功能即可解决问题。

    例如:public AuthenticationContext(): base(<connection string id>,false)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2010-11-06
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多