6

Я использую поставщик Sitemap по умолчанию with secutiry trimming. Но некоторые, как, я получаю:Карта сайта Безопасность Обрезка бросков Ошибка SQL

A network-related or instance-specific error occurred while establishing a connection to 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

+0

Здравствуйте, пожалуйста, вы можете потушить точное исключение вы получаете + любой трассировки стека. –

+0

И вы абсолютно уверены, что соединение с БД действительно является правильным? – Vedran

+0

Является ли ваш asp: sitemapdatasource, а затем

ответ

2

Ядро ошибки с вашего скриншоте

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server

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

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

  • Имя сервера SQL Server может решить
  • То, что сервер может быть достигнуто с пингом
  • что SQL-сервер настроен на прием удаленных подключений
  • То, что служба SQL Browser работает на поле SQL Server
  • что брандмауэр Windows не мешая
  • что сам SQL Server на самом деле работает в е irst place

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

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

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

все еще бросает такая же ошибка. :( – robasta

0

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

0

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

0

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

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

“Steps to troubleshoot SQL connectivity issues”