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() {
...
}
}
Попробуйте эту рабочую карту сайта:
<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>
Я бы попробовал сделать совершенно новый проект, используя только поставщика ролей по умолчанию и настройки безопасности, и посмотрел, сможешь ли ты заставить это работать.