Sitemap Security Trimming выдает ошибку SQL - PullRequest
6 голосов
/ 07 февраля 2012

Я использую провайдера 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? Как обрезка получает роли?

EDIT: the ysod

Ответы [ 5 ]

2 голосов
/ 21 февраля 2012

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

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

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

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

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

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

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

0 голосов
/ 21 февраля 2012

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

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

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

0 голосов
/ 21 февраля 2012

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

0 голосов
/ 21 февраля 2012

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

0 голосов
/ 17 февраля 2012

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

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