WebSecurity.InitializeDatabaseConnection()和Azure托管的奇怪问题

时间:2013-05-02 10:57:02

标签: c# asp.net-mvc asp.net-mvc-4 azure webdeploy

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

我有一个带有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地址。
  6. 这是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方法中没有代码导致第二个错误。

0 个答案:

没有答案