0

.NET Framework 4 プロジェクトで標準の VS 2012 MVC 4 インターネット テンプレートを使用しました。[Authorize] 属性で装飾されたアプリケーションの部分にアクセスするために、主に外部ログイン (Google、Microsoft、Facebook、Yahoo、Twitter) を使用していました。

[私が気づいたことの 1 つは、VS によって作成された既定の web.config には、ASP.NET Web フォーム アプリケーションで見られるものとは異なり、メンバーシップまたはロール プロバイダーに関するセクションが含まれていないことです。]

プロジェクトを azurewebsites.net サイトにデプロイしました。最初は問題なく動作していましたが、しばらく使用すると、アプリは例外をスローします。これは、サーバーのマシン構成ファイルをSqlMembershipProvider使用して、 という接続文字列を使用してアクセスしようとしたためLocalSqlServerです。

Q1: SqlMembershipProvider は SimpleMembership プロバイダーとどのように関連していますか?

とにかく、web.config に <membership> セクションを作成し、<clear/> を追加しました。SqlRoleProviderこれはその問題を解決しましたが、接続文字列を使用して machine.configにアクセスしようとしたため、別の問題が発生しましLocalSqlServerた。<clear/> を含む <roleManager> セクションを web.config に追加しようとしましたが、うまくいきませんでした。defaultProvider が含まれていることを主張します。何を入れればいいですか?

Q2. .NET Framework 4.0 MVC 4 アプリケーションで SimpleMembership ロール プロバイダーに使用するアセンブリは何ですか?

私は試した:

System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

しかし、それは別の問題を引き起こしましたCould not find stored procedure 'dbo.aspnet_CheckSchemaVersion'。aspnet_regsql.exe を実行する前に、次の質問をしたいと思います。

Q3: 標準アプリがしばらく正常に動作した後、SqlMembershipProvider と SqlRoleProvider を探し始めるのはなぜですか?

サーバーの設定をいじっている人はいますか?

4

1 に答える 1

2

SimpleMembership を使用する場合、web.config の設定は次のようになります。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership>

SimpleMembership ロール プロバイダーを含むアセンブリは WebMatrix.WebData です。

SqlMembershipProvider は、どちらもメンバーシップ プロバイダーであることを除いて、SimpleMembership とは関係ありません。私の推測では、SimpleMembership が正しく構成されていない場合、デフォルトで SqlMembershipProvider になっていると思います。

アプリケーションのどこかで、WebSecurity.InitializeDatabaseConnectionを呼び出して SimpleMembership のデータベースを初期化する必要があります。このメソッドの最初のパラメーターは、使用する接続文字列を示します。アプリケーションが MVC4 Internet テンプレートを使用して作成された場合、このメソッドはAccount Controller で装飾されたフィルターInitializeSimpleMembershipAttributeで呼び出されます。自分で InitializeDatabaseConnection メソッドの呼び出しを追加する必要がある場合は、それを Gloaba.asax Application_Start メソッドに追加します。

于 2013-10-14T12:45:17.440 に答える