Универсальные поставщики 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 показывает пошаговую информацию о том, как это сделать, поэтому, пожалуйста, следуйте и посмотрите, чего не хватает: