6

セキュリティトリミングを備えたデフォルトのサイトマッププロバイダーを使用しています。しかし、どういうわけか、私は次のようになります。

SQL Serverへの接続の確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。

サイトマッププロバイダーが間違った場所で役割を探していると思います。私の構成は次のようになります。

<connectionStrings>
   <add name="DB" ... />
</connectionStrings>


   <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear/>
        <add name="SqlProvider" .../>
      </providers>
    </membership>
    <roleManager enabled="true">
      <providers>
        <add connectionStringName="DB"  type="System.Web.Security.SqlRoleProvider" ... />
      </providers>
    </roleManager>

サイトマップタグは次のように定義されます。

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true"  >
      <providers>
          <clear/>
          <add name="XmlSiteMapProvider"
            description="Default SiteMap provider."
            type="System.Web.XmlSiteMapProvider "
            siteMapFile="Web.sitemap"
            securityTrimmingEnabled="true"  />
      </providers>
  </siteMap>

なぜSQLエラーが発生するのですか?トリミングはどのように役割を取得しますか?

編集: ysod

4

5 に答える 5

2

スクリーンショットのコアエラーは

SQL Serverへの接続の確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、およびSQLServerが正しいことを確認します

残念ながら、これは切り捨てられます。メッセージは通常、「リモート接続を許可するように構成されています。 」と続き、さらに特定の理由が続く場合があります(たとえば、(他のさまざまな理由の中で)「プロバイダー:SQLネットワークインターフェイス、エラー:26」と表示される場合があります)。 –指定されたサーバー/インスタンスの検索エラー ")

ただし、これまでのメッセージでは、クライアントマシンとSQLServerボックス間の接続に問題があるように見えます。したがって、最初にSQLServerボックスとネットワーク接続に対してデューデリジェンスを行うことを検討します。

  • SQLServerサーバー名は解決できます
  • pingでサーバーにアクセスできること
  • そのSQLサーバーはリモート接続を受け入れるように構成されています
  • SQLブラウザサービスがSQLServerボックスで実行されていること
  • そのWindowsファイアウォールは邪魔になりません
  • そのSQLServer自体が実際に実行されているのはそもそも

それらが合格した場合は、ログオンできるよりも検証する必要があります。私は通常、SQL管理ツール、特にコマンドラインツールを使用sqlcmdして基本的な接続をテストします(たとえばsqlcmd -E -S mysqlserver\instance、デフォルトのデータベースsqlcmd -E -S mysqlserver\instance -d databaseに接続したり、特定のデータベースに接続したりします)。明らかに、Webアプリケーションを実行しているユーザーとしてこれらを実行する必要があります。そうしないと、認証を試みます(runas異なる資格情報でコマンドプロンプトを使用または開始します[スタートメニューでコマンドプロンプトを見つけて、 Shiftキーを押しながら右クリック->[別のユーザーとして実行]。

ただし、最終的に役立つのは、(切り捨てられたバージョンではなく)完全なエラーメッセージテキストを取得できる場合です。これにより、発生している特定の問題を絞り込むことができます。

于 2012-02-21T14:54:15.580 に答える
0

この実用的なサイトマップを試してください:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
  <providers>
    <add name="XmlSiteMapProvider" description="SiteMap provider which reads in .sitemap XML files." type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="true" />
  </providers>
</siteMap>
于 2012-02-17T03:11:46.577 に答える
0

I would try making a brand new project with just the default role provider and security trimming and see if you can get that working.

于 2012-02-21T16:47:53.203 に答える
0

If the SqlRoleProvider works without security trimming enabled, my first guess would be that there's something about your database or connection string that is preventing multiple simultaneous connections. This would be quite a bit simpler to evaluate if you could provide the details of your DB connection string...

于 2012-02-21T17:06:27.843 に答える
0
于 2012-02-21T19:35:56.220 に答える