ASP.NET MVC 2 с использованием Visual Studio 2010. Изменение менеджера ролей через web.config

#asp.net-mvc

#asp.net-mvc

Вопрос:

Я реализовал свой собственный пользовательский объект диспетчера ролей. Когда я запускаю свое веб-приложение, используя версию IIS Visual studio, оно работает нормально. Я вижу имя пользователя и могу перейти к своему классу Role Manager и посмотреть, что он делает. Когда я отлаживаю приложение с помощью IIS 7, HttpContext.Current.User.Идентичность.Имя пустое, и оно не использует мой класс Role Manager при определении того, какие роли есть у моего пользователя. Я проверил, что все мои библиотеки DLL находятся в каталоге bin.

Я предполагаю, что проблема в IIS 7. Что мне нужно настроить в IIS 7, чтобы это заработало и чтобы он использовал мой диспетчер ролей?

Вот фрагмент web.config, который устанавливает диспетчер ролей.

 <membership>
  <providers>
    <clear />
  </providers>
</membership>
<roleManager defaultProvider="HyperionRoleProvider" enabled="true">
  <providers>
    <clear />
    <add name="HyperionRoleProvider" type="Census.BUD.Common.HyperionRoleProvider" applicationName="/" />
  </providers>
</roleManager>
  

Ответ №1:

От:

http://learn.iis.net/page.aspx/528/how-to-use-the-sample-read-only-xml-membership-and-role-providers-with-iis-70/

«Эти образцы отлично подходят для использования с IIS 7.0 для демонстрационных или тестовых веб-сайтов, но они не работают так, как написано в IIS 7.0, из-за способа разработки безопасности IIS 7.0. Исходные инструкции позволяли вам развернуть образцы поставщиков членства / ролей в папке App_Code вашего веб-сайта, но для IIS 7.0 требуется, чтобы поставщики были зарегистрированы в Глобальном кэше сборок (GAC), прежде чем их можно будет развернуть. Имея это в виду, следующие шаги помогут вам выполнить компиляцию и развертывание поставщиков XML, доступных только для чтения, в системе разработки.»

Убедитесь, что ваша сборка находится в GAC

Комментарии:

1. Проблема, с которой я столкнулся сейчас, заключается в том, что я использую Windows 2008, и я нормально компилирую на основе статьи, но я не вижу свои сборки в c:windowsassembly каталог. Делает ли Windows Server 2008 что-то еще со сборками?

2. Вам нужно взять сборку, в которой находится ваш поставщик ролей (я бы выделил код этого поставщика в отдельную библиотеку), а затем перетащить его в c:windowsassembly (нажмите Пуск, выполнить, затем введите в c:windowsassembly как самый простой способ). Чтобы поместить его в GAC, вы также должны убедиться, что ваша библиотека также подписана, что вы можете сделать в свойствах вашего проекта.

3. Тогда вы можете, по крайней мере, легко протестировать это — возможно, ваша команда gacutil завершается с ошибкой (хотя вы должны увидеть это при компиляции вашего проекта)