Я создал веб-приложение ASP.NET MVC3 (Razor) и заменил поставщика членства универсальным поставщиком членства MS, установленным через NuGet, а базу данных MDF - базой данных SQL Server Compact 4 SDF.
Все отлично работает с этим SDF, я могу управлять пользователями и ролями из WSAT, проходить проверку при входе в систему на моей рабочей станции разработки и т. Д. В любом случае, я испытываю странное поведение, и, возможно, это просто то, с чем столкнулись другие пользователи: каккак только я разверну приложение на производственном сервере, если я попытаюсь войти в систему с любой учетной записью пользователя (существует около 60 учетных записей), я получу отклонение с ошибкой неверного пароля.Я также загрузил обратно базу данных SDF в свою машину разработки, и она работает с любой учетной записью.
Могу добавить, что я создал все учетные записи программно, из внешнего списка, с кодом, подобным этому:
MembershipUser user = Membership.GetUser(sName);
if (user != null)
{
Membership.CreateUser(sName, sPassword, sEmail);
AddUserToRole(sName, bIsAdmin? "administrator" : "member");
}
В любом случае, все они выглядят нормально и активны в WSAT.
Я пытался использовать учетные записи как администраторов, так и участников, но получаю одинаковый результат.Тем не менее, база данных та же самая, которую я использую локально с успехом.Я также перечислил на странице все учетные записи пользователей с их состоянием блокировки, на всякий случай, но все они выглядят нормально, и ни одна не отсутствует, как онлайн, так и локально.Любой намек?
Моя конфигурация похожа на:
...
<connectionStrings>
<clear />
<add name="ApplicationServices"
connectionString="Data Source=|DataDirectory|\Organizer.sdf;"
providerName="System.Data.SqlServerCe.4.0" />
<add name="DefaultConnection"
connectionString="Data Source=|DataDirectory|\Organizer.sdf;"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
...
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<clear />
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<profile defaultProvider="DefaultProfileProvider">
<providers>
<clear />
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</profile>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<clear />
<add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
...
ОБНОВЛЕНИЕ : во время некоторых случайных попыток я пытался установить одну из учетных записей в формате четкого пароля,вместо хешированного по умолчанию один, и это работает, в то время как все остальные неизмененные учетные записи продолжают показывать ту же проблему.Поэтому я должен сделать вывод, что в хешированном пароле есть что-то, что не работает с SqlServer Compact и / или моей веб-конфигурацией.Кто-нибудь знает о проблемах в этой области с CF4?