3

デフォルトの「ASP.NET MVC へようこそ!」を実行しようとしています。Azure 上の MVC3 アプリケーション。ASP.NET ユニバーサル プロバイダー経由で、ASP.NET メンバーシップ ストアに SQL Azure を使用します。「MyDatabase」という名前の SQL Azure データベースがあり、新しいログインとユーザーの両方が「MyUser」という名前です。ユーザーはログインに関連付けられており、MyDatabase の dbo_owner ロールが付与されています。MyDatabase は、管理ポータルで Web ロールにリンクされたリソースとして設定されます。

サイトは Azure で正常に表示されますが、データベース操作を試行すると、データベース接続が失敗します。

ログインで要求されたデータベース "master" を開けません。ログインに失敗しました。ユーザー「MyUser」のログインに失敗しました。

答えを探すときの通常の応答は、接続文字列に "Database" パラメーターを設定することです。私は確かにこれを行いましたが、それでも「マスター」を試行し続けます。無視されているようです:

Server=tcp:myserver.database.windows.net,1433;Database=MyDatabase;User ID=MyUser@myserver;Password=mypassword;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True

私が除外した他のこと:

  • Web ロールに RDP 接続し、この接続文字列が Web.config に表示されていることを確認しました。
  • 「データベース」の代わりに「初期カタログ」を試しましたが、結果は同じでした。
  • おそらく重要:「データベースへの接続:」を「MyDatabase」に設定すると、SSMSはデータベースに接続しますが、それをデフォルトのままにして「Database = MyDatabase;」を入力すると、同じエラーで失敗します。追加の接続パラメーターで。私はそれが何を意味するのか分かりませんか?

おそらくここでの初心者の間違いです-他に何をチェックすればよいですか?

4

1 に答える 1

4

例外のスタック トレースを調べると、この問題の解決に役立ちました。

... System.Data.SqlClient.SqlProviderServices.UsingMasterConnection(...) で System.Data.SqlClient.SqlProviderServices.DbDatabaseExists(...) で System.Data.Objects.ObjectContext.DatabaseExists() で System.Web で。 Providers.Entities.DatabaseCreationHelper.DatabaseExists(...) System.Web.Providers.ModelHelper.CreateMembershipEntities(ConnectionStringSettings 設定) で System.Web.Providers.DefaultMembershipProvider.Membership_CreateUser(...) ...

私は新しいデータベースを使用していたので、ASP.NET ユニバーサル プロバイダーはメンバーシップ/ロール テーブルを作成しようとしていましたが、何らかの理由でこれを達成するためにマスター データベースを実際に使用する必要がありました。新しいユーザーをマスターに追加し、ログインに結び付け、必要に応じてテーブルを作成できるように「dbmanager」ロールがあることを確認しました。

マスターを経由する必要がある理由は 100% わかりませんが、スタック トレースでは、指定したデータベースが実際に存在するかどうかを確認するためにそうしているように見えます。(決定的な答えを知っている場合は、コメントしてください!)

于 2012-06-20T13:22:53.230 に答える