Универсальные поставщики ASP.NET и состояние сеанса

Я занимаюсь разработкой веб-сайта ASP.NET MVC 4 и использую универсальные поставщики Microsoft ASP.NET. Я планирую развернуть в Windows Azure и использовать базу данных SQL. Чтобы инициализировать членство, профили и роли в моей локальной базе данных SQL Server 2008, я создал нового пользователя с помощью инструмента администрирования веб-сайта ASP.NET. Как мне инициализировать сессии?

Когда мое приложение запускается, естественно, я получаю SqlException, говорящий "Неверное имя объекта dbo.Sessions". При тестировании в Windows Azure это не было проблемой; dbo.Sessions был создан автоматически. Я могу работать локально после создания сценария создания таблицы из dbo.Sessions в Azure и применения его к моей локальной базе данных SQL.

web.config:

<membership hashAlgorithmType="SHA1" defaultProvider="DefaultMembershipProvider">
  <providers>
    <clear />
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<profile enabled="false" defaultProvider="DefaultProfileProvider">
  <providers>
    <clear />
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<roleManager enabled="false" defaultProvider="DefaultRoleProvider">
  <providers>
    <clear />
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</roleManager>
<sessionState mode="Custom" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</sessionState>

2 ответа

Решение

В этой статье более подробно рассматриваются различия между старым aspnet_Memembership и универсальными провайдерами.

http://dotnet.dzone.com/articles/stronger-password-hashing-net

Ключевые моменты из статьи:

Во-первых, больше нет aspnet_regsql, вы просто убедитесь, что строка подключения установлена ​​и учетная запись имеет права DBO (не волнуйтесь, она не должна оставаться такой), затем запустите приложение и попытайтесь выполнить любое действие, которое должен заставить провайдера членства попасть в БД (т.е. войти в систему - не имеет значения, что нет учетной записи).

Вот и все, что нужно, когда это работает.

Когда вы используете универсальные поставщики Microsoft ASP.NET для развертывания в базе данных Windows Azure и SQL, может возникнуть проблема с строкой подключения, поскольку таблица в базе данных SQL не создана.

Блог ниже от Soctt показывает пошаговую информацию о том, как это сделать, поэтому, пожалуйста, следуйте и посмотрите, чего не хватает:

Представляем System.Web.Providers - универсальные поставщики ASP.NET для сеансов, членства, ролей и профилей пользователей в SQL Compact и SQL Azure.

Другие вопросы по тегам