Azure 故障转移组和 IdentityDbContext
Azure Failover Groups and IdentityDbContext
我们的数据库的 Azure 故障转移组和 IdentityDbContext (AspNet Identity) 存在一个奇怪的问题。
如果我将连接字符串设置为故障转移组,我会在日志中收到登录失败错误,但是如果我直接连接到主服务器或辅助服务器,则登录成功。
另一个奇怪的部分是,这似乎只发生在 IdentityDbContext 中。如果我只使用普通的数据库上下文进行测试,登录可以正常使用故障转移组连接字符串,如果我使用新的 SqlConnection,它也可以正常工作,但是当我尝试使用 IdentityDbContext -> 登录失败时。
我知道从 SSMS 连接到故障转移组时,您需要指定一个默认数据库,因为它无法访问主数据库,但在我的连接字符串中我指定了一个数据库,所以我不确定是否可以是问题所在。
有没有人遇到过这个?我觉得很奇怪,这只会发生在我自己身上。
这是 .NET 4.6.1 中的最新版本 Microsoft.AspNet.Identity (2.2.1)
根据你的描述,我自己制作了一个测试demo,效果不错。
我使用故障转移组url作为连接字符串,它可以成功登录和注册用户。
我猜你可能设置了错误的连接字符串。
我建议你可以按照下面的connectionstring再测试一下。
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;
我还使用 identity 2.2.1 和 net 4.6.1 MVC 应用程序。
最终我找到了这个问题,感谢这个博客post:
http://www.morganskinner.com/2014/04/optimizing-aspnet-identity-database.html
尽管从技术上讲,博客 post 与故障转移组无关,但它确实指出了 IdentityDbContext 对 sys.databases 和其他 "master" 数据库操作进行检查的事实在故障转移组中不可用。
所以它使用正常的 DBContext 和 SqlConnections 的原因是因为没有执行这些隐藏的检查。 A
由于我不需要 IdentityDbContext 来执行这些检查,只需将基本调用的第二个参数设置为 false 以绕过此功能即可解决问题。
例如:public AuthenticationContext(): base(<connection string id>,false)
我们的数据库的 Azure 故障转移组和 IdentityDbContext (AspNet Identity) 存在一个奇怪的问题。
如果我将连接字符串设置为故障转移组,我会在日志中收到登录失败错误,但是如果我直接连接到主服务器或辅助服务器,则登录成功。
另一个奇怪的部分是,这似乎只发生在 IdentityDbContext 中。如果我只使用普通的数据库上下文进行测试,登录可以正常使用故障转移组连接字符串,如果我使用新的 SqlConnection,它也可以正常工作,但是当我尝试使用 IdentityDbContext -> 登录失败时。
我知道从 SSMS 连接到故障转移组时,您需要指定一个默认数据库,因为它无法访问主数据库,但在我的连接字符串中我指定了一个数据库,所以我不确定是否可以是问题所在。
有没有人遇到过这个?我觉得很奇怪,这只会发生在我自己身上。
这是 .NET 4.6.1 中的最新版本 Microsoft.AspNet.Identity (2.2.1)
根据你的描述,我自己制作了一个测试demo,效果不错。
我使用故障转移组url作为连接字符串,它可以成功登录和注册用户。
我猜你可能设置了错误的连接字符串。
我建议你可以按照下面的connectionstring再测试一下。
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;
我还使用 identity 2.2.1 和 net 4.6.1 MVC 应用程序。
最终我找到了这个问题,感谢这个博客post:
http://www.morganskinner.com/2014/04/optimizing-aspnet-identity-database.html
尽管从技术上讲,博客 post 与故障转移组无关,但它确实指出了 IdentityDbContext 对 sys.databases 和其他 "master" 数据库操作进行检查的事实在故障转移组中不可用。
所以它使用正常的 DBContext 和 SqlConnections 的原因是因为没有执行这些隐藏的检查。 A
由于我不需要 IdentityDbContext 来执行这些检查,只需将基本调用的第二个参数设置为 false 以绕过此功能即可解决问题。
例如:public AuthenticationContext(): base(<connection string id>,false)