这个很奇怪,让我觉得我在这里忽略了一些明显的东西。
我有一个带有 SQL Server 2008 数据库的 ASP.NET MVC4 应用程序。我首先使用 EF 代码,然后进行代码优先迁移。对于 MVC 成员,我使用的是 SimpleMembershipProvider。
以下是有关当前事物状态的一些信息:
- 该数据库已经在 Azure 上,并且运行了最新的迁移。
- 我可以使用我存档的连接字符串连接到数据库,因此我可以看到的连接字符串没有问题。
- 该网站的各种发布一直在间歇性地发生这种情况。
- 我正在调用 WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "UserId", "UserName", autoCreateTables: true); 在 global.asax
- 我的 IP 地址在数据库服务器上是允许的。
这是 global.asax 中的 Application_Start() 方法:
protected void Application_Start()
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "UserId", "UserName", autoCreateTables: true);
//SeedMembership();
AreaRegistration.RegisterAllAreas();
Database.SetInitializer<PTContext>(null);
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
如果我将它发布到 Azure,它会给我这个错误:
Login failed for user 'userName'.
This session has been assigned a tracing ID of '95f84d15-0e0c-47f8-bc04-3ae7febf5de8'.
Provide this tracing ID to customer support when you need assistance.
'userName' 这里是我在 azure 上的 Sql Server 的用户名。
现在是奇怪的部分。如果我像这样注释掉 WebSecurity 行:
protected void Application_Start()
{
//WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "UserId", "UserName", autoCreateTables: true);
//SeedMembership();
AreaRegistration.RegisterAllAreas();
Database.SetInitializer<PTContext>(null);
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
现在如果我发布,它会让我进入我的登录页面(这是默认的起始页面,所以这是一件好事),但是一旦我登录,我就会收到这个错误:
You must call the "WebSecurity.InitializeDatabaseConnection" method
before you call any other method of the "WebSecurity" class.
This call should be placed in an _AppStart.cshtml file in the root of your site.
这个错误并不奇怪,因为我显然是在使用 WebSecurity 来处理我的登录和会员信息。
你可以看到这对我来说是一种双输。我的假设是 WebSecurity.Init..() 行是导致第一个错误被抛出的原因,很明显我的 app_start 方法中缺少代码导致了第二个错误。