2012-02-22 2 views
0

C#을 사용하여 asp.net을 사용하여 웹 페이지를 개발 중입니다.C#의 잠금 (객체)

중요한 코드가 있습니다. 한 번에 한 사용자 만 코드 섹션에 액세스 할 수 있습니다.

다음 코드

string doc_number = ""; 
try { 
    lock (lock1) { 

     doc_number = PostSalaryToSAP(); 

     // doc_number = ""; 
     if (doc_number.Length > 6) { 
      this.Result.Text = "Posting Successful For Employee id '" + cbEmpID.SelectedItem.Text.ToString() + "' With Doc_number : " + doc_number; 
      this.Result.ForeColor = System.Drawing.Color.Green; 
      this.btnPost.Enabled = false; 
      this.btnDelete.Enabled = false; 
     } else { 
      this.Result.Text = "Posting Failed "; 
      this.Result.ForeColor = System.Drawing.Color.Green; 
     } 
    } 
} catch (Exception ex1) { 
    Result.Text = "Posting Unsuccessful "; 
    Result.ForeColor = System.Drawing.Color.Green; 
} 

을 사용했지만이 코드와이 결과는 제대로 생성되지 않아요. 일반적으로이 행은 db 테이블에 단일 레코드를 추가합니다.

doc_number = PostSalaryToSAP(); 

그러나이 코드를 사용하면 2 행이 추가됩니다. 내가 이해할 수없는 실제 문제는 무엇입니까? 제발 도와주세요

+3

lock1이란 무엇입니까? 일반적으로 다음과 같습니다 : private static readonly object lock1 = new object(); – row1

+3

저는 이것이 lock 문과 아무런 관련이 없다고 생각합니까? 귀하의 코드는 콜 스택 (callstack)보다 두 배 더 높게 실행됩니다. – Jehof

답변

3

이것이 단일 노드 응용 프로그램이라고 가정하면 잠그는 개체는 응용 프로그램 범위 여야합니다. 각 페이지 요청은 페이지의 새로운 인스턴스를 생성하므로 lock1이 해당 페이지의 구성원이면 여러 요청이 중요 섹션을 동시에 실행할 수 있습니다. Global.asax OnApplicationStart>Application["SalaryPostLock"]에서 잠금 개체를 만듭니다.

그러나 클러스터에서 응용 프로그램을 실행하려면 분산 잠금 메커니즘이 필요합니다. 이 경우에 조언 해 주시겠습니까?