2011-03-14 7 views
0

로드를 처리하기 위해 호출 서비스 당해야하는 WCF 서비스를 사용하고 있지만 스레드 안전성이 필요한 특정 메서드가 있습니다.WCF PerCall 서비스를 사용하여 리소스를 보호하는 방법

void CreateCustomer(Customer customer) 
{ 
//If customer does not exists in DB 
    //Create customer 
} 

나는 (같은 세부 사항) 고객을 만드는 두 통화가있는 경우, 내가 정말 하나를 예상 할 때 두 고객이 데이터베이스에 생성이 위험 걱정입니다.

통화 당 내 서비스를 허용하면서이 문제를 해결할 수있는 방법이 있습니까?

+0

코드, XML 또는 데이터 샘플을 게시하는 경우 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드 샘플"버튼 ('{}) '을 클릭하여 멋지게 형식을 지정하고 구문 강조 표시하십시오 그것! –

+0

고객이 두 번 존재한다는 것을 어떻게 알 수 있습니까 ?? 데이터베이스의 고객 번호 필드 ?? 그것에'UNIQUE' 제약 조건을 넣으십시오! 그렇게하면 얼마나 많은 동시 호출이 고객을 만들려고해도 데이터베이스에 하나만 존재할 수 있습니다 –

답변

3

데이터베이스 동시성과 스레드 안전성을 혼동하고 있습니다. PerCall 서비스는 서비스 루틴에서 여러 스레드를 생성하지 않는 한 스레드 안전 문제를 일으키지 않습니다 (사용자는이를 피해야합니다).

삽입 중에 고객 테이블의 데이터베이스 일관성 및 동시성 (예 : 다른 사람이 작성한 고객이 표시되지 않음)에 관심을 가져야한다는 질문을 다시 말해야합니다.

이 문제를 처리 할 ACID 속성 (원 자성, 일관성, 격리, 내구성)을 충족하는 매우 표준화 된 방법이 있습니다. 트랜잭션에서 확인/삽입을 마무리하십시오.

당신이 특정 고객 ID가 존재하는 경우 트랜잭션 및 검사가있는 저장 프로 시저 (CreateCustomerIfNotExists를 말) 작성하고, 존재하지 않는 경우 테이블에 새 행을 삽입합니다 것이 더 좋을 것입니다.

관계형 데이터베이스의 ACID 속성은 자동으로 두려워하는 것을 방지합니다.

관련 문제