After reading about RIA services. I wanted to write some sample code to hook into asp.net Membership and profile providers.
So I wrote couple of custom providers.
MembershipProvider
I had a simple table with UserID,UserName,Email and password columns
I did not bother with all the different overloads. I have just added code in few places like Initialize, GetUser, ValidateUser and CreateUser
ProfileProvider
I created a table which will store 3 values for each user, Theme, City and State
again I did not code for all the different overloads. I have added code for Initialize, SetPropertyValues, GetPropertyValues
once I had these providers in place
I added a Silverlight application with Webproject
and modified the Web.config file to add my providers
<membership defaultProvider=”SampleMembershipProvider1″ >
<providers>
<clear/>
<add name=”SampleMembershipProvider1″ type=”CustomProviders.SampleMembershipProvider” connectionStringName=”constring” enablePasswordRetrieval=”true” enablePasswordReset=”true” requiresQuestionAndAnswer=”true” writeExceptionsToEventLog=”false”/>
</providers>
</membership>
<profile defaultProvider=”SampleProfileProvider1″>
<providers>
<add name=”SampleProfileProvider1″ type=”CustomProviders.SampleProfileProvider” connectionStringName=”constring” />
</providers>
<properties>
<add name=”Theme” type=”System.Int32″ allowAnonymous=”true”/>
<add name=”City” type=”System.String” allowAnonymous=”true”/>
<add name=”State” type=”System.String” allowAnonymous=”true”/>
</properties>
</profile>
The next step is to add a new DomainService to the webproject
Adding the following code will get us started
[EnableClientAccess]
public class Authentication : AuthenticationBase<UserBase> { }
as we have a profile also,created another class User inheriting from UserBase
[EnableClientAccess]
public class Authentication : AuthenticationBase<User> { }
public class User : UserBase
{
public int Theme { get; set; }
public string City { get; set; }
public string State { get; set; }
}
I added the following class so that we can have a Page(UI) in Silverlight which allows for user Registration
[EnableClientAccess]
public class MembershipService : DomainService
{
[ServiceOperation]
public void AddUser(string userName, string password, string email)
{
MembershipCreateStatus createStatus;
Membership.CreateUser(userName, password, email, null, null, true, out createStatus);
if (createStatus != MembershipCreateStatus.Success)
{
throw new DomainServiceException(createStatus.ToString());
}
}
}
We also need to add a Service to App.XAML
<Application.Services>
<appsvc:WebUserService x:Name=”UserService” />
</Application.Services>
The sample does not have any UI, but when the page is loaded it will create a user and login the user as you can see from the code below
public partial class MainPage : UserControl
{
UserService service;
public MainPage()
{
InitializeComponent();
CreateUser();
}
void CreateUser()
{
MembershipContext ctx = new MembershipContext();
ctx.AddUserCompleted += new EventHandler<System.Windows.Ria.Data.InvokeEventArgs>(ctx_AddUserCompleted);
ctx.AddUser(“user1”, “test”, “user@test.com“);
}
void ctx_AddUserCompleted(object sender, System.Windows.Ria.Data.InvokeEventArgs e)
{
MessageBox.Show(“User added”);
Login();
}
void Login()
{
service = App.Current.Services[“UserService”] as UserService;
service.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(service_LoginCompleted);
service.Login(“user1”, “test”);
}
void service_LoginCompleted(object sender, LoginCompletedEventArgs e)
{
User user = (service.User as User);
if (string.IsNullOrEmpty(user.City))
{
user.City = “dallas”;
user.State = “TX”;
user.Theme = 100;
service.SaveUserCompleted += new EventHandler<SaveUserCompletedEventArgs>(service_SaveUserCompleted);
service.SaveUser();
}
}
void service_SaveUserCompleted(object sender, SaveUserCompletedEventArgs e)
{
MessageBox.Show(“login success and profile properies set”);
}
}
you can download the code here
One thought on “Using asp.net Membership and profile providers with RIA Services”