Azure故障转移组和IdentityDbContext

时间:2017-10-03 11:22:00

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

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

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

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

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

还有其他人遇到过这个吗?我觉得奇怪的是,这只会发生在我自己身上。

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

2 个答案:

答案 0 :(得分:0)

根据你的描述,我已经在我身边创建了一个测试演示,它运行良好。

我使用故障转移组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应用程序。

答案 1 :(得分:0)

最后,我发现这个问题归功于这篇博文:

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

尽管技术上博客文章与故障转移组无关,但它确实指出了IdentityDbContext对sys.databases和其他" master"进行检查的事实。故障转移组中不可用的数据库操作。

因此它使用普通DBContexts和SqlConnections的原因是因为没有执行这些隐藏的检查。甲

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

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