Использование членства провайдера в MVC2 с MySQL - PullRequest
0 голосов
/ 11 февраля 2011

Я прочитал несколько сообщений на этом форуме об этом, но, похоже, ничего не работает.Я пытаюсь заменить провайдеров на основе SQL Server по умолчанию провайдерами MySQL, используя последнюю версию соединителя (6.3.6.0) и VS2010, но я продолжаю получать сообщение об ошибке при доступе к разделу «Безопасность» в WSAT.Вот мои шаги:

1) создать новую базу данных mysql.2) создать новое приложение MVC2.3) измените web.config следующим образом:

    <connectionStrings>
     <remove name="LocalMySqlServer"/>
     <add name="LocalMySqlServer"
      connectionString="Data Source=127.0.0.1;Port=3306;Database=Sample;User id=root;Password=mysql;"
      providerName="MySql.Data.MySqlClient"/>
     <remove name="ApplicationServices"/>
     <add name="ApplicationServices"
      connectionString="Data Source=127.0.0.1;Port=3306;Database=Sample;User id=root;Password=mysql;"
       providerName="MySql.Data.MySqlClient" />
    </connectionStrings>
    ...
    <membership defaultProvider="MySqlMembershipProvider">
     <providers>
     <clear/>
     <add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
     connectionStringName="MySqlMembershipConnection"
     enablePasswordRetrieval="false"
     enablePasswordReset="true"
     requiresQuestionAndAnswer="false"
     requiresUniqueEmail="true"
     passwordFormat="Hashed"
     maxInvalidPasswordAttempts="5"
     minRequiredPasswordLength="6"
     minRequiredNonalphanumericCharacters="0"
     passwordAttemptWindow="10"
     applicationName="/"
     autogenerateschema="true"/>
    </providers>
    </membership>

<profile>
 <providers>
 <clear/>
 <add type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
         name="MySqlProfileProvider"
         applicationName="/"
         connectionStringName="MySqlMembershipConnection"
         autogenerateschema="true"/>
 </providers>
</profile>

<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
 <providers>
 <clear />
 <add connectionStringName="MySqlMembershipConnection"
  applicationName="/"
  name="MySqlRoleProvider"
  type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
  autogenerateschema="true"/>
 </providers>
</roleManager>

<machineKey validationKey="AutoGenerate" validation="SHA1"/>

Когда я запускаю WSAT и нажимаю Безопасность, я получаю эту ошибку:

Возникла проблема с выбранным хранилищем данных.Это может быть вызвано неверным именем или учетными данными сервера или недостаточным разрешением.Это также может быть вызвано тем, что функция диспетчера ролей не включена.Нажмите кнопку ниже, чтобы перейти на страницу, где вы можете выбрать новое хранилище данных.

Следующее сообщение может помочь в диагностике проблемы: Источник не найден, но не удалось найти некоторые или все журналы событий.Чтобы создать источник, вам нужно разрешение на чтение всех журналов событий, чтобы убедиться, что новое имя источника уникально.Недоступные журналы: Безопасность.

Может кто-нибудь сказать мне, что не так с этой процедурой?Спасибо всем!

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

наконец-то у меня получилось, и я хотел бы поделиться информацией здесь.Я использую последнюю версию Connector / Net (6.3.6) на веб-сайте ASP.NET MVC 2.Вот что я сделал:

1) создайте новую базу данных MySql (или просто используйте свою, если есть).

2) убедитесь, что ваш machine.config включил автогенерацию схемы для MySQLMembershpProvider.Как вы, вероятно, знаете, machine.config обычно находится в каталоге c: \ windows \ microsoft.net \ framework [version] \ config \ machine.config.Найдите под записью MySQLMembershipProvider и добавьте атрибут autogenerateschema = "true" к элементу.Весь элемент будет выглядеть следующим образом:

<add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" autogenerateschema="true"/>

3) в вашем web.config (я имею в виду недавно созданное веб-приложение, поэтому при необходимости внесите изменения) измените строки подключения и провайдеров так,что они ссылаются на MySql.Обычно: под connectionStrings добавьте:

<remove name="ApplicationServices"/> <add name="ApplicationServices" connectionString=connectionString="server=YOURSERVER;UserId=YOURUSER;password=YOURPASSWORD;Persist Security Info=True;database=YOURDATABASE;charset=utf8" providerName="MySql.Data.MySqlClient"/>

(Кстати, обратите внимание на charset = utf8 в строке подключения: это не требуется для членства, но это необходимо, если вы собираетесьиспользуйте эту строку соединения для обмена данными Юникода: недостаточно просто определить набор символов в полях таблицы MySql!).

Кроме того, в разделе членство / поставщики ... убедитесь, что элемент поставщика членства (обычночто-то вроде add name = "AspNetSqlMembershipProvider" ...) Атрибут connectionStringName относится к строке соединения, которую вы установили выше (в моем случае, connectionStringName = "ApplicationServices").Сделайте то же самое для поставщиков профиля и roleManager, которые должны выглядеть следующим образом:

<code>
<profile>
  <providers>
    <clear/>
    <add type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
         name="AspNetSqlProfileProvider"
         applicationName="/"
         connectionStringName="ApplicationServices"
         autogenerateschema="true"/>
  </providers>
</profile>
<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
  <providers>
    <clear />
    <add connectionStringName="ApplicationServices"
         applicationName="/"
         name="MySqlRoleProvider"
         type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
         autogenerateschema="true"/>
  </providers>
</roleManager>
<machineKey validationKey="AutoGenerate" validation="SHA1"/>

(Обратите внимание на проверку SHA1!).

4) запускWSAT из Visual Studio и пусть он настраивает вашу базу данных MySql.Он должен создать все необходимые таблицы и позволить вам создавать пользователей и назначать роли.Остерегайтесь таблиц имен!С WSAT-таблицами, такими как myaspnet_Users (не myaspnet_users), создаются, и это может привести к путанице (MySQL Workbench, похоже, смущен этим и покажет вам только 1 таблицу, если у вас есть 2 таблицы, имена которых отличаются только регистром.кажись умнее в этом отношении).Лучше позволить WSAT создавать свои таблицы, чтобы избежать этой суеты.

Наконец, помните, что если вы собираетесь использовать таблицы my_aspnet ... в некоторых отношениях, вы должны убедиться, что выбрали правильный движок базы данных MySQL,то есть не MyISAM, а InnoDB, иначе ваши внешние ключи, даже если они установлены, будут игнорироваться.

Это все, чем я могу поделиться в этом вопросе.Надеюсь, это может сэкономить несколько часов кому-то еще ...

0 голосов
/ 11 февраля 2011

Возможно, я нашел виновника: на компьютере, на котором я работал сегодня, не была установлена ​​конфигурация machine.config (для .net 4) для autogenerateschema = "true" (кстати, в моем коде есть опечатка, имя строки подключения это не правильно, но это произошло только путем копирования / вставки в моем посте). Так что, может быть, это полезно для всех новичков, таких как я: не забудьте установить autogenerateschema = "true" в

Спасибо, все равно

...