Членство в Asp.Net через инструмент администрирования веб-сайта ASP.NET - PullRequest
4 голосов
/ 11 марта 2010

Я создал базу данных с помощью aspnet_regsql, база данных была создана в SQL Server 2008, а не в папке данных в моем проекте (нужно ли перемещать ее в папку вручную?).
Затем в инструменте администрирования веб-сайта я зашел в раздел провайдера и нажал кнопку «Проверить тест».

Я получил ошибку:

Не удалось установить соединение с база данных. Если вы еще не создал базу данных SQL Server, выход инструмент администрирования веб-сайта, используйте утилита командной строки aspnet_regsql создать и настроить базу данных, а затем вернитесь к этому инструменту, чтобы установить провайдер.

Может быть, мне нужно установить что-то в файле web.config, например настройки членства или строки подключения (или инструмент администрирования веб-сайта ASP.NET должен создать эти настройки для меня)?

Обновление:
Может быть, это происходит потому, что я использую SQL Server 2008 полный и не экспресс?

Обновление 2:

После настройки раздела членства и строки подключения к моей базе данных aspnetdb в Инструменте администрирования веб-сайта я открыл security-> Мастер настройки безопасности-> Определить роли (этап 4), я получил эту ошибку:

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

Следующее сообщение может помочь в диагностика проблемы: невозможно подключиться к базе данных SQL Server. в System.Web.Administration.WebAdminPage.CallWebAdminHelperMethod (Boolean isMembership, String methodName, Параметры объекта [], Тип [] paramTypes) в ASP.security_wizard_wizardpermission_ascx.OnInit (EventArgs есть System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Ответы [ 4 ]

5 голосов
/ 11 марта 2010

Да, вам нужно изменить строки подключения в файле web.config.

Посмотрите в файле web.config, вы, вероятно, увидите нечто подобное в элементе <membership>:

<membership>
  <providers>
    <clear />
    <add connectionStringName="LocalSqlServer" 
         name="AspNetSqlMembershipProvider"
         [...]
         type="System.Web.Security.SqlMembershipProvider, 
               System.Web, 
               Version=2.0.0.0,
               Culture=neutral,
               PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</membership>

Атрибут connectionStringName указывает платформе искать в вашем элементе <connectionStrings> строку подключения с именем «LocalSqlServer» - это может быть не определено в вашем файле web.config, поскольку его можно унаследовать от Machine.Config в Каталог конфигурации ядра .Net Frameworks.

Вероятно, вам следует выбрать новое имя для строки подключения и обновить своих членов, роли и профиль (если вы все их используете), чтобы использовать новое имя.

Тогда в элементе <connectionStrings> есть следующее:

<connectionStrings>
  <remove name="LocalSqlServer" />
  <add name="MyConnectionString"
       connectionString="Data Source=[ServerName];Initial Catalog=[DatabaseName];Integrated Security=True"
       providerName="System.Data.SqlClient" />
</connectionStrings>

Настройте значения в соответствии с вашими системами - я бы рекомендовал Integrated Security вместо сохранения логина и пароля вашей базы данных в файле web.config, но YMMV (например, на моем общем хосте я не могу использовать Integrated Security, поэтому должны предоставить данные пользователя / пароль).

Инструмент администрирования веб-сайта также учитывает эти строки подключения.

Изменить для ответа на комментарий

Вы успешно вошли в систему вообще? Или создал пользователя? Я просто хочу исключить, что строка подключения настроена и работает?

У вас также настроен и включен поставщик ролей? Вы обновили там атрибут "connectionStringName"?

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

<!-- Note enabled="true" - you need to turn this one on! -->
<roleManager enabled="true">
  <providers>
    <clear />
    <add connectionStringName="MyConnectionString"
         [...]
         type="System.Web.Security.SqlRoleProvider, 
               System.Web,
               Version=2.0.0.0,
               Culture=neutral,
               PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>

Для получения более подробной информации об атрибутах elised, я бы порекомендовал документацию:

Как только вы настроите это, все должно работать.

Если вы не смогли создать пользователя / войти, я бы проверил:

  1. Строка подключения - убедитесь, что имена совпадают, убедитесь, что data source соответствует экземпляру вашего сервера (не всегда просто имя вашего компьютера, это может быть что-то вроде "MachineName \ SqlServer").
  2. Если вы используете интегрированную защиту, вам необходимо убедиться, что вы указали учетную запись, которую ваш сайт использует под соответствующими правами в базе данных: вы должны обнаружить, что в вашей базе данных есть ряд ролей, начиная с aspnet_ для того, чтобы вы могли создавать пользователей (которые вам понадобятся, если у вас есть регистрационная форма), вы должны добавить учетную запись к aspnet_XXXX_FullAccess ролям (по одной для членства, персонализации, профиля и ролей).
0 голосов
/ 20 ноября 2014

У меня были подобные проблемы, так как я впервые работаю с членством asp.net. Если вы установите <roleManager Enabled="False" />, то сможете создавать пользователей.

Я думаю, что здесь, но я думаю, что дополнительный поставщик в web.config для AspNetSqlRoleProvider и дает ему строку подключения, которая указывает на базу данных служб asp с пользователем, который настроен для доступа к информации управления ролями. на стороне SQL (см. свойства пользователя sql для «схем, принадлежащих этому пользователю» и «членство в роли базы данных»), что позволит инструменту правильно войти в БД.

Используете ли вы проверку подлинности Windows или SQL на вашем SQL Server?

PS -

Чем больше я читаю и понимаю ответ Жафа, тем больше он мне нравится. Он дал ссылку на схему msdn для элемента AspNetSqlRoleProvider (не обманывайте себя Microsoft, говоря, что документ не существует, просто выберите подходящую версию из выпадающего списка «другие версии»).

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

<roleManager enabled="true">
  <providers>
    <clear/>
    <add name="AspNetSqlRoleProvider"
         type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
         connectionStringName="MyConnectionString"/>
  </providers>
</roleManager>

, как я упоминал ранее, пользователь, указанный в моей строке подключения, требует aspnet_Roles _... Доступ к свойствам, а также aspnet_Membership _... Доступ, если вы не используете integrated security=true вместе с <identity impersonate="true" userName="windowsUser" password="winUsrPassword" />, в этом случае ваши окна пользователю нужны эти свойства.

0 голосов
/ 14 апреля 2014

Выполните следующие шаги для правильной интеграции членства на свой веб-сайт (если вы видите вышеупомянутую ошибку, например

"Could not establish a connection to the database. If you have not yet created the SQL Server database, exit the Web Site Administration tool, use the aspnet_regsql command-line utility to create and configure the database, and then return to this tool to set the provider.").

шаг 1:

Запустите aspnet_regsql.exe утилиту из папки C: \ windows \ Microsoft.NET \ Framework \ v2.0.50727 на вашем компьютере. При выборе или двойном щелчке утилиты aspnet_regsql.exe открывается мастер, как показано ниже.

enter image description here

При нажатии кнопки «Далее» в вышеприведенном окне открывается следующее окно, в котором вы можете либо настроить SQL Server для служб приложений, либо удалить информацию служб приложений из существующей базы данных.

шаг 2:

Установите переключатель «Настройка SQL Server для служб приложений» для установки новой базы данных и нажмите кнопку «Далее».

enter image description here

Шаг 3

Введите имя сервера SQL Express, как показано ниже. Обратите внимание, что вы можете изменить имя базы данных служб приложений на желаемое имя (aspnetdb по умолчанию). (Или) вы можете выбрать Sql Server аутентификацию (имя пользователя, пароль, необходимо соответствующее имя базы данных)

Обратите внимание, что я назвал базу данных ASPNETServices

enter image description here

Шаг 4:

Нажмите кнопку «Далее» и подтвердите правильность настроек, чтобы продолжить установку (как показано на рисунке ниже), и нажмите кнопку «Далее».

enter image description here

Шаг 5

Нажатие кнопки «Далее» в вышеприведенном окне возвращает вас к окну подтверждения, как показано ниже, после успешной установки базы данных служб приложений для ASP.NET. В конце нажмите Finish.

enter image description here

Шаг 6

Вы увидите установленную базу данных ASPNET Services, готовую к использованию в приложении ASP.NET enter image description here

0 голосов
/ 11 марта 2010

Откройте SQL Studio Management Studio и откройте базу данных master, сделайте новый запрос и введите

sp_configure 'user instances enabled','1'

выполните это, затем введите

reconfigure 

и выполните это тоже, чтобы изменения вступили в силу. Для получения дополнительной информации о sp_configure вы можете прочитать http://msdn2.microsoft.com/en-us/library/ms188787.aspx, если вы хотите перечислить всю конфигурацию, тогда выполните sp_configure без каких-либо параметров.

...