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 サーバーのユーザー名です。

今は奇妙な部分です。次のように 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 メソッドにコードがないことが 2 番目のエラーの原因であることは明らかです。

4

0 に答える 0