Членство в ASP.NET не заполняет новых пользователей - PullRequest
1 голос
/ 11 августа 2009

Я использую поставщика членства ASP.NET для обработки всех действий по членству на моем текущем сайте.

Я столкнулся со странной проблемой. Как вы знаете, если вы знакомы с членством в Asp.Net, данные хранятся в ProfileCommon.

Таким образом, вы можете использовать ProfileCommon.UserId для получения идентификатора пользователя.

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

Однако, если я создаю нового пользователя на своем локальном dev-сервере, объект Profilecommon не заполняется и выдает ошибки, поскольку страницы ссылаются, например, на ProfileCommon.UserId, и он имеет значение null, что вызывает исключение. Пользователь прошел проверку подлинности, но ProfileCommon не заполняется.

У кого-нибудь есть идеи / предложения относительно того, почему это может происходить?

Редактировать: вот моя запись web.config. Я не уверен, почему мы удаляем AspnetSqlProfileProvider, а затем добавляем его. Это сайт, который я взял на себя, и я еще не на 100% знаком с членством в asp.net.

  <profile defaultProvider="AspNetSqlProfileProvider">
  <providers>
    <remove name="AspNetSqlProfileProvider"/>
    <add name="AspNetSqlProfileProvider"
         type="System.Web.Profile.SqlProfileProvider" 
         connectionStringName="ConnectionString"/>
</providers>

Актуальная информация о профиле;

        <profile defaultProvider="SqlProfileProvider">
        <providers>
            <remove name="AspNetSqlProfileProvider"/>
            <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="FiftyMillionDBConnection"/>
        </providers>
        <properties>
            <add name="FirstName" type="String" serializeAs="String"/>
            <add name="LastName" type="String" serializeAs="String"/>
            <add name="EmailAddress" type="String" serializeAs="String"/>
            <add name="ScreenName" type="String" serializeAs="String"/>
            <add name="BirthDay" type="DateTime" serializeAs="String"/>
            <group name="Address">
                <add name="AddressLine1" type="String" serializeAs="String"/>
                <add name="AddressLine2" type="String" serializeAs="String"/>
                <add name="City" type="String" serializeAs="String"/>
                <add name="State" type="String" serializeAs="String"/>
                <add name="Zip" type="String" serializeAs="String"/>
            </group>
            <group name="PersonalInfo">
                <add name="Gender" type="String" serializeAs="String"/>
                <add name="Height" type="String" serializeAs="String"/>
            </group>
            <group name="OtherInfo">
                <add name="Agent" type="String" serializeAs="String"/>
                <add name="Employee" type="String" serializeAs="String"/>
                <add name="Source" type="String" serializeAs="String"/>
                <add name="EventRegistration" type="String" serializeAs="String"/>
            </group>
            <group name="AuthInfo">
                <add name="GUID" type="String" serializeAs="String"/>
                <add name="RegSource" type="String" serializeAs="String"/>
                <add name="ReceiveMail" type="String" serializeAs="String"/>
            </group>
        </properties>
    </profile>

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 августа 2009

Использует ли раздел Profile в web.config то же значение connectionStringName, что и в разделе Membership? Это первое, что я бы проверил.

Изменить: Можете ли вы опубликовать свой полный блок конфигурации профиля? У вас должно быть что-то, что определяет свойства, такие как

<profile enabled="true">

    <properties>

        <add name="UserId" type="Int32"/>

        <add name="Gender" type="string"/>

        <add name="Age" type="Int32"/>

    </properties>

</profile>
1 голос
/ 11 августа 2009

В дополнение к connectionStringName вы можете также проверить еще раз applicationName. Если они не совпадают или вы определяете имя приложения в одном разделе, а не в другом, вы столкнетесь с проблемами.

   <membership defaultProvider="SqlProvider">
      <providers>
         <add name="SqlProvider"
          type="..."  
          connectionStringName="SomeConnString"
          applicationName="SomeApp"
          ...
          ... />
      </providers>
   </membership>

   <profile defaultProvider="ProfileProvider">
     <providers>
        <clear />
        <add name="ProfileProvider" 
            type="..." 
            applicationName="SomeApp"/>
     </providers>
     <properties>
        ...
     </properties>
  </profile>
...