4

うーん...私は本当にこれについて頭をつかむことができません。

web.config には次のものがあります。

<connectionStrings>
   <clear /> <!--- need this to prevent using LocalSqlServer from machine.config or somewhere becouse it is not present when when publish to hosting -->
   <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-Goaly-20120615111028;Integrated Security=SSPI" />  
</connectionStrings>

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <!-- I think this line is telling asp.net that I want the membership working agains defaultconnection, and not LocalSqlServer connection????? -->
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

しかし、それは不平を言っています:

The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.

設定タブで VS2012 RC からのパブリッシュを使用すると、ModelContext と DefaultConnection が取得されますが、これはどのように機能するのでしょうか?

私が望むのは、modelcontext によって作成されたテーブルと同じデータベース内のメンバーシップ テーブルを取得することだけです。

これはとてもお粗末なはずですが、どうにかして複雑にしすぎたに違いありません。

助けてくれてありがとう。

よろしく

ラルシ

4

3 に答える 3

6

Windows マシン上のすべての Web サイトのデフォルト設定は、ディレクトリ Windows/Microsoft.NET/Framework(または 64 ビットの場合は Framework64)/version にある machine.config と web.config の 2 つの構成ファイルの設定を継承します。 /config.

以下は、machine.config のデフォルト バージョンのスニペットです。

<system.web>
    <processModel autoConfig="true"/>
    <httpHandlers/>
    <membership>
        <providers>
            <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
        </providers>
    </membership>
    <profile>
        <providers>
            <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </providers>
    </profile>
    <roleManager>
        <providers>
            <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </providers>
    </roleManager>
</system.web>

したがって、あなたの質問に対する答えは次のとおりですLocalSqlServer。接続への依存関係を確立するのは machine.config です。<clear/>この質問に対する他の回答が示唆するようにタグを追加するAspNetSqlMembershipProvierと、という名前のメンバーシッププロバイダーへの参照が削除され、それとともにへの参照が削除されLocalSqlServerます。

于 2012-08-04T05:40:56.383 に答える
3

次の投稿forumsasp</clear>では、membership 要素と rolemangaer 要素 (web.config に存在する場合) の接続文字列の前にタグ を追加すると問題が解決することが記載されています。

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
   <clear/> <!-- solves the issue -->    
   <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

また、SqlMetal.exe を使用してメンバーシップ テーブルを既存のデータベースに追加することもできます。

于 2012-08-03T19:48:49.123 に答える
2

構成ファイルがロードされる前に、(ルート構成ファイルの 1 つに) メンバーシッププロバイダーが既に登録されています。その Membershippprovider は LocalSqlServer を指しています。

最初のメンバーシップ プロバイダーを削除する必要があります。これは、接続文字列で行っているように、プロバイダーを追加する前にすべてのプロバイダーをクリアすることで実行できます。

<system.web>構成セクションのセクション内で、要素の前に要素membership/providersを追加します。<clear><add>

于 2012-08-03T19:55:38.117 に答える