これは、ここで明らかなことを見落としていると思わせるほど奇妙です。
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 サーバーのユーザー名です。
今は奇妙な部分です。次のように 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 番目のエラーの原因であることは明らかです。