Technical Details

Release 1.2 - ...

ASP.NET 2.0 introduced Profile Providers, a customizable, pluggable personalization system. A basic implementation to get started with, the SqlProfileProvider, is also part of the package.

Profile Providers are declared in the Web.config:

XML CopyCode image Copy Code
<profile defaultProvider="ProfileProvider">
      <providers>
        <add name="ProfileProvider" connectionStringName="SqlServer"
         applicationName="MyApp" 
         type="System.Web.Profile.SqlProfileProvider, System.Web, 
         Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      </providers>
      <properties>
        <add allowAnonymous="false" name="Name" type="string"/>
        <... />
      <properties>
</profile>

The system comes with a ProfileBase class which is 'enriched' during site startup to create an inherited class with the extra properties declared in the web.config. This way, ASP.NET code has access to a strongly typed Profile object with these custom properties.

Binary- and XML-serialization is used to store the contents of the profile object into the database.

This built-in SqlProfileProvider class has a number of drawbacks:

  1. Non-searchable storage in opaque text- or binary blobs.
    There is no direct way to query Profile data from inside of the database. You cannot search profiles of your "members" with a normal SQL query, and you cannot index the profile data with FullText, because all the profile name/value pairs are serialized and stored in a single column, essentially.
  2. No Oracle support.
  3. Datamodel is not in line with Smartsite iXperion database.
    There is no easy way to link personalization data to existing visitors and users.
  4. Static representation of a user-profile, based on a .NET class and/or web.config settings.
    The ASP.NET Profile Provider creates a strongly typed Profile object based on a class declared in the web.config (the inherits attribute of the profile tag), or the ProfileBase class, together with the properties declared in the profile/properties section. In iXperion however, a new SXML application should not require the web.config or a .NET class to be modified to store and use its own profile settings. 

This is why Smartsite iXperion provides a personalization system that is built as a custom ASP.NET Profile Provider. This provider is database-neutral, stores its data in a searchable way, and is dynamically expandable.

A User Profile is either linked to a user/vistor in Smartsite (UserId foreign key), or an anonymous user (linked to the profile cookie). Each profile property is stored seperately in the UserProfileProperties table.

The UserProfile data model 

The vwUserProfileProperties joins userprofiles, users/visitors and userprofileproperties to directly show users personal settings:

SQL CopyCode image Copy Code
select userName, propertyName from vwUserProfileProperties