1

这个很奇怪,让我觉得我在这里忽略了一些明显的东西。

我有一个带有 SQL Server 2008 数据库的 ASP.NET MVC4 应用程序。我首先使用 EF 代码,然后进行代码优先迁移。对于 MVC 成员,我使用的是 SimpleMembershipProvider。

以下是有关当前事物状态的一些信息:

  1. 该数据库已经在 Azure 上,并且运行了最新的迁移。
  2. 我可以使用我存档的连接字符串连接到数据库,因此我可以看到的连接字符串没有问题。
  3. 该网站的各种发布一直在间歇性地发生这种情况。
  4. 我正在调用 WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "UserId", "UserName", autoCreateTables: true); 在 global.asax
  5. 我的 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 方法中缺少代码导致了第二个错误。

4

0 回答 0