2011-07-10 1 views
0

J'écris un service web WCF qui permet d'enregistrer de nouveaux utilisateurs dans le système. J'ai donc le contrat d'exploitation suivant:Quelle transaction IsolationLevel devrais-je utiliser?

[ServiceContract] 
public interface ISecurityService 
{ 
    /// <summary> 
    /// Register new user in system, if no exceptions were thrown 
    /// user was registered successfully 
    /// </summary> 
    [OperationContract] 
    [FaultContract(typeof(SecurityFaultException))] 
    void Register(string userName, string password); 
} 

L'idée est simple comment synchroniser Register appel de méthode pour empêcher l'enregistrement de deux utilisateurs avec le même nom?

J'ai pensé utiliser IsolationLevel.Serializable mais je ne suis pas sûr de cette solution. Quelqu'un peut-il me donner un bon conseil ou partager de bonnes pratiques sur la synchronisation des services WCF?

MISE À JOUR: Je sauvegarde les utilisateurs dans une base de données.

+0

Pourquoi voulez-vous sérialiser les appels de registre? (Ceci pour comprendre la nature du besoin d'isolation des transactions.) – Richard

+0

où stockez-vous les utilisateurs enregistrés? En mémoire ou dans une base de données? –

+2

Je pense que cela devrait suffire quand UserName a une contrainte Unique dans le Db. IsolationLevel ne devrait pas être pertinent pour Insert. –

Répondre

2

Si vous enregistrez des utilisateurs en db il suffit d'utiliser le niveau d'isolation par défaut (ReadCommited) et de mettre une contrainte unique ou une clé primaire dans la colonne UserName qui empêche la valeur dupliquée.

Questions connexes