0

Web サイト管理ツールを使用して、サーバー上の Web サイトのメンバーシップを構成しようとしています。SQL Server のローカル コピーに aspnetdb データベースを作成し、WSAT を使用していくつかの役割を追加し、サーバー上のいくつかのディレクトリをロックダウンしました。

ただし、ユーザーを管理しようとすると、次のエラーが発生します。

接続名 'LocalSqlServer' がアプリケーション構成で見つからなかったか、接続文字列が空です。System.Web.Util.SecUtility.GetConnectionString (NameValueCollection 構成) で System.Web.Security.SqlMembershipProvider.Initialize (文字列名、NameValueCollection 構成) で System.Web.Configuration.ProvidersHelper.InstantiateProvider (ProviderSettings providerSettings、タイプ providerType) で

明らかに、LocalSqlServer 接続文字列問題ありません。そうしないと、たとえば、ロールを追加できませんでした。

web.config の関連部分は次のとおりです。

  <connectionStrings>
        <clear />
        <remove name="LocalSqlServer"/>
        <add name="LocalSqlServer" connectionString="Data Source=(local);Initial Catalog=aspnetdb;User Id=LoginUser;Password=password;" providerName="System.Data.SqlClient"/>
  </connectionStrings>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" defaultUrl="~/admin/admin.aspx" />
    </authentication>
        <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
            <providers>
                <clear />
                <add
          name="SqlProvider"
          type="System.Web.Security.SqlMembershipProvider"
          connectionStringName="LocalSqlServer"
          applicationName="myapp" />
            </providers>
        </membership>
    <profile>
      <providers>
        <clear />
                <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="myapp" />
      </providers>
    </profile>
    <roleManager enabled="true">
      <providers>
        <clear />
                <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="myapp" />
      </providers>
    </roleManager>
  </system.web>

私が理解している限り、Clear/Remove要素は他の構成ファイルをオーバーライドする必要がありますが、関連するmachine.configに同じ接続文字列を追加しようとしましたが、役に立ちませんでした。

何か案は?

別の方法として、Membership DB ストアド プロシージャを直接呼び出すことができない理由はありますか? 誰かがサポート文書を知っていますか?

4

3 に答える 3

1

最初の試みを可能な限り破棄し、最初からやり直しました。今回は、新しく別のメンバーシップ DB を作成し、machine.config からすべてのロールとメンバーシップ プロバイダーの要素をコメントアウトしました...

これで問題は解決しませんでしたが、その過程で、machine.config を変更したにもかかわらず、WSAT がまだどこかからロール プロバイダーの構成を取得していることに気付きました。これにより、x86 machine.config にヒットし、アプリ プールに戻りました。アプリ プールは 32 ビット アプリケーションを有効にするように設定されていました。

これをfalseにリセットすると、代わりに別のエラーが発生しましたが、エラーを回避できました-ただし、この問題を個別に調査し、必要に応じて新しい投稿を作成します.

なぜ 32 ビット アプリ プールが問題を引き起こしたのかはわかりません。web.config (<clear />項目を含む) が、machine.config から継承されたすべての適切な設定を置き換える必要があると予想していました。なれ。したがって、私の「再構築」の他の部分も同様に貢献した可能性があります。言うのが難しい。

残念ながら、私が望んでいた決定的な解決にはなりませんでした。

于 2012-10-29T13:33:45.863 に答える
1

いくつかの調査の結果、可能な解決策を見つけました。私が見つけたスレッドのいくつかを読んだかもしれないと思いますが、あなたが示したバージョンとの違いを指摘しようとしました.

ロール マネージャー タグでは、

問題を引き起こす可能性のある を設定していませんdefaultProvider

<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">

詳細については、このリンクを参照してください。それも参考になりました。

私も気づいた

あなたの中のあなたconnectionStringの「d」はUser ID大文字ではありません。大文字と小文字が区別されるかどうかはわかりません。

さらに、一部のスレッドはIntegrated Security=必要に応じて設定されてconnectionStringいるようです。

このリンクを参照してください。

どうやら、

既定では、メンバーシップ/ロール プロバイダーは、[...] ルート web.config からローカル SQL Express データベースを指すように設定された "localSQLServer" 接続文字列を使用します。ほとんどの場合、サーバーには SQL Express がインストールされていないため、このエラーが発生します。

接続文字列をクリアすると、これらのエラーが明らかになります。

参照

しかし、あなたはすでに</clear>どこでもタグを使用していると思います。それは正しいです。

その他の参考資料

aspnet Forumsも彼らの技術であるため、見たいと思うかもしれません。エラーメッセージを入力したところ、実際に多くの結果が得られました。

ついに

これらの提案のいずれでも問題が解決しない場合は、「最初から」やり直し、各構成を 1 つずつ追加することをお勧めします。幸運を!

于 2012-10-16T06:46:56.853 に答える
0

これは私のために働いた:

  1. Visual Studio でサーバー エクスプローラーに移動し、aspnetdb をアタッチします。
  2. aspnetdbを右クリック - 接続を変更
  3. 接続テストが機能する場合は、[詳細] をクリックし、ウィンドウの下部にある接続文字列をコピーします。
  4. web.config/ConnectionStrings/ApplicationServices/ConnectionString でこの接続文字列を置き換えます
于 2015-03-08T07:42:34.397 に答える