Business layer wrapping user information and transactions?

M

Mark Baldwin

I have an application with both Windows Forms and ASP.NET front ends and
uses both integrated web security and a security database. The problem I
have is that I need to syncronize these security databases.

The web front end uses ASP membership with the SQL provider, the database is
moved to the SQL Server instead of the SQL Express datafile.

The Windows Forms app uses tables such as "users" within the database.

If I add a user on the website, I need also to add a user to the database
"users" table.

To achieve this I write a business layer component that wraps both the
security data tables and the ASP.NET membership functions. So for instance,
to delete a user...

[DataObjectMethod(DataObjectMethodType.Delete, true)]
static public void Delete(string UserName)
{
// delete user from internal database table "users"
usersTableAdapter UserTableAdapter = new usersTableAdapter();
int rowsAffected = UserTableAdapter.DeleteByName(UserName);

// delete user from ASP.NET membership database
Membership.DeleteUser(UserName, true);
}

The question is how do I get these two functions into a transaction so that
if the deletion for the ASP.NET member fails, the delete on the internal
database table is rolled back?
 
P

Peter Bradley

One of the golden rules of software development is never, ever to hold the
same data in more than one place. It's a maintenance nightmare.

Is there no way you can get both front ends to use the same data?


Petere
 
S

sloan

<<What he said>>

I'd strongly recommend (with emphasis on the strongly) not trying to keep
"sync" data.

Using the Provider Model, you can create your ~own
MyCustomMembershipProvider : MembershipProvider

This will allow you to use your custom tables, and such.

There's no reason why you can't use your MyCustomMembershipProvider from a
Winforms.
You'll just lose the "drag and drop" ability that you have in asp.net 2.0.

See
http://www.15seconds.com/issue/050216.htm

Peter Bradley said:
One of the golden rules of software development is never, ever to hold the
same data in more than one place. It's a maintenance nightmare.

Is there no way you can get both front ends to use the same data?


Petere

Mark Baldwin said:
I have an application with both Windows Forms and ASP.NET front ends and
uses both integrated web security and a security database. The problem I
have is that I need to syncronize these security databases.

The web front end uses ASP membership with the SQL provider, the database
is moved to the SQL Server instead of the SQL Express datafile.

The Windows Forms app uses tables such as "users" within the database.

If I add a user on the website, I need also to add a user to the database
"users" table.

To achieve this I write a business layer component that wraps both the
security data tables and the ASP.NET membership functions. So for
instance, to delete a user...

[DataObjectMethod(DataObjectMethodType.Delete, true)]
static public void Delete(string UserName)
{
// delete user from internal database table "users"
usersTableAdapter UserTableAdapter = new usersTableAdapter();
int rowsAffected = UserTableAdapter.DeleteByName(UserName);

// delete user from ASP.NET membership database
Membership.DeleteUser(UserName, true);
}

The question is how do I get these two functions into a transaction so
that if the deletion for the ASP.NET member fails, the delete on the
internal database table is rolled back?
 
S

sloan

And see
http://msdn2.microsoft.com/en-us/library/f1kyba5e(VS.80).aspx

(read my other post first)


Peter Bradley said:
One of the golden rules of software development is never, ever to hold the
same data in more than one place. It's a maintenance nightmare.

Is there no way you can get both front ends to use the same data?


Petere

Mark Baldwin said:
I have an application with both Windows Forms and ASP.NET front ends and
uses both integrated web security and a security database. The problem I
have is that I need to syncronize these security databases.

The web front end uses ASP membership with the SQL provider, the database
is moved to the SQL Server instead of the SQL Express datafile.

The Windows Forms app uses tables such as "users" within the database.

If I add a user on the website, I need also to add a user to the database
"users" table.

To achieve this I write a business layer component that wraps both the
security data tables and the ASP.NET membership functions. So for
instance, to delete a user...

[DataObjectMethod(DataObjectMethodType.Delete, true)]
static public void Delete(string UserName)
{
// delete user from internal database table "users"
usersTableAdapter UserTableAdapter = new usersTableAdapter();
int rowsAffected = UserTableAdapter.DeleteByName(UserName);

// delete user from ASP.NET membership database
Membership.DeleteUser(UserName, true);
}

The question is how do I get these two functions into a transaction so
that if the deletion for the ASP.NET member fails, the delete on the
internal database table is rolled back?
 
S

Steven Cheng[MSFT]

Hello Mark,

As Peter and sloan have suggested, you can build a custom provider to do
the work. Or if you want to manage such synchronized database updating, you
can use the ADO.NET's Transaction(for updating in single database). Or if
the tables are in different database, you can consider using classes in
System.Transacdtions namespace to perform multi-database transaction.

In addition, for ASP.NET SQL Membership &Role provider(and its API), you
can feel free to use it in non-asp.net application also(winform or console
application). What you need to do is simply copy those configuration about
ASP.NET membership & role(from your web application's web.config file to
your non-ASP.NET application's app.config file). Here is a blog article
I've ever writen to demonstrate this:

#Manage database of ASP.NET 2.0 Membership & Role services in non-ASP.NET
context
http://blogs.msdn.com/msdnts/archive/2006/12/16/asp-net-2-0-membership-role-
management-out-of-asp-net-context.aspx

Thus, you can let your winform application use the same API and access the
same membershp &role data as the ASP.NET application.

If you have any other specific question, please feel free to post here.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



This posting is provided "AS IS" with no warranties, and confers no rights.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top