2017-03-14 12 views
1

以下のようにWCFメソッドを実装しました。重複要求WCFサービス

[ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     string string AddUser(string name,string department,string empCode); 
    } 

    public class Service1 : IService1 
    { 
      public string AddUser(string name,string department,string empCode) 
      { 
       UserDAL.LogRequest(name,department,empcode); //Log request in database 

       bool isExist=UserDAL.IsExist(name,department,empCode); //Check same user exist or not 
       if(isExist==false) 
       { 
        UserDAL.Add(name,department,empCode); 
       } 
      } 
    } 

このWCFは、私は、同じユーザがデータベース(ie.UserDAL.IsExist)に存在しないことが確認されたユーザの詳細を挿入する前などネットWinフォームアプリケーション、SOAP UI、ORACLEによって使用されます。しかしそれでもDBに重複したレコードを挿入しました。「UserDAL.IsExist」メソッドもチェックしており、同じユーザーの詳細がDBに存在する場合はtrueを返しました。重複したレコードが数分の1秒で挿入されていることに気付きました。

答えて

2

まあ、はい。あなたのコードは安全ではありません。それはを確認し、次に挿入をチェックします。 2人で同時に同じ情報を使ってサービスを呼び出すとどうなりますか?

Call1:挿入

Call2:

を失敗するあなたはsyncronizesユニットを必要とする偽

Call1を返しUserDAL.IsExist:偽

Call2を返しUserDAL.IsExist 。それはあなたのデータベースでなければなりません。あなたは失敗を挿入して聞いてください。なぜあなたのデータベースは重複の挿入を受け入れるのですか?そこには制約が必要です。

関連する問題