Sitemap Security Trimming выдает ошибку SQL

Я использую провайдера Sitemap по умолчанию с безопасным обрезанием. Но, кое-как, я получаю:

При установке соединения с 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 определяется так:

<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? Как отделка получает роли?

РЕДАКТИРОВАТЬ: йсод

5 ответов

Решение

Основная ошибка на вашем скриншоте

При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server

к сожалению, это усечено. После этого сообщение обычно продолжается словами " настроено для разрешения удаленных подключений", и за этим может далее следовать конкретная причина (например, может указываться (среди прочих других причин) "поставщик: сетевые интерфейсы SQL, ошибка: 26 - Ошибка при поиске сервера / указанного экземпляра ")

Однако с сообщением, которое у вас есть, это похоже на проблему соединения между клиентским компьютером и блоком SQL Server. Поэтому я бы сначала посмотрел на должную осмотрительность в отношении блока SQL Server и сетевого подключения:

  • Имя сервера SQL Server может разрешить
  • Что до сервера можно добраться с помощью ping
  • Этот сервер SQL настроен на прием удаленных подключений
  • То, что служба SQL Browser работает на коробке SQL Server
  • Этот брандмауэр Windows не мешает
  • Этот SQL Server на самом деле работает в первую очередь

Если они пройдут, вам нужно подтвердить, чем вы можете войти в систему. Я бы обычно использовал инструменты управления SQL, особенно инструмент командной строки sqlcmd проверить основные подключения (например: sqlcmd -E -S mysqlserver\instance подключиться к базе данных по умолчанию или sqlcmd -E -S mysqlserver\instance -d database для подключения к конкретной базе данных). Очевидно, вам нужно будет запустить их как пользователь, под которым работает ваше веб-приложение, в противном случае они попытаются пройти аутентификацию как вы (либо используйте runas или запустите командную строку с другими учетными данными [найдите командную строку в меню "Пуск", затем щелкните правой кнопкой мыши -> "Запуск от имени другого пользователя].

Однако, в конечном счете, было бы полезно, если бы вы могли получить полный текст сообщения об ошибке (а не усеченную версию), тогда это может помочь сузить конкретную проблему, с которой вы столкнулись.

Если SqlRoleProvider работает без включенной подстройки безопасности, я думаю, что в вашей базе данных или в строке соединения есть что-то, что мешает нескольким одновременным соединениям. Это было бы немного проще оценить, если бы вы могли предоставить детали вашего DB Строка подключения...

В целом конфигурация выглядит правильно. Согласно сообщению об исключении, база данных недоступна. Вы бы проверили, может ли база данных быть подключена?

using (SqlConnection connection = new SqlConnection()) {
    connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
    try {
        connection.Open();
    }
    catch() {
        ...
    }
}

"Действия по устранению проблем с подключением SQL"

Попробуйте эту рабочую карту сайта:

<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>

Я бы попробовал сделать совершенно новый проект, используя только поставщика ролей по умолчанию и настройки безопасности, и посмотрел, сможешь ли ты заставить это работать.

Другие вопросы по тегам