2011-01-04 5 views
1

Actaully는 PDA 응용 프로그램 부분이있는 Asp.net 웹 사이트를 개발했습니다. 경우에 따라 회사의 직원이 아침에 와서 PDA에 데이터를 가져 와서 하루 종일 작업하고 Evening에서 사무실에 다시 오거나 웹 액세스를 통해 서버의 데이터를 업데이트합니다. 우리는 웹 서비스가 원격 메소드이기 때문에 웹 서비스를 통해이 작업을 수행했습니다. 따라서 웹 액세스만으로 액세스 할 수 있습니다.제어 동시성 : 웹 서비스를 통한 데이터 동기화; 방법?

동시성은 웹 서비스를 통해 동기화하는 동안 동시성을 제어하는 ​​방법이지만 시도하는 직원이 많을 수 있습니다. 한 번에 데이터를 업데이트 할 수 있습니다.

웹 서비스에서는 PDA 응용 프로그램에서 DataTable을 받고 SQL Server와 함께 LINQ를 통해 작업을 업데이트하거나 삽입합니다.

답변

0

클라이언트가 데이터를 제거하는 사용 사례는 무엇입니까? 그들은 단지 데이터를 업데이트하고 있거나 새로운 데이터를 삽입하고 있습니까?

데이터를 업데이트하는 경우에만 특정 행의 마지막 값이 올바른지 (예 : 최신 시간 스탬프로 값을 커밋) 또는 다른 데이터에 값이 있는지 여부를 결정해야합니다.

데이터를 삽입 할 때 데이터베이스가 증분 기본 키를 사용한다고 가정합니다. 이 경우 PDA 응용 프로그램에서받은 DataTable을 단순히 커밋 할 수 없습니다. 새로운 행이 무엇인지 확인한 다음 증 분식 ID가없는 새 행을 서버 테이블에 삽입하여 새 증 분식 ID를 생성해야합니다. 그런 다음 생성 된 새 ID로 PDA의 DataTable을 업데이트해야합니다.

업데이트가 처리되는 실제 순서 (여러 클라이언트가 동시에 동기화 됨)를 처리하려면 서버 업데이트가 순차적으로 관리되도록 프로세스에서 데이터 집합을 큐에 배치하는 것이 좋습니다. 조금 더 간단합니다.

0

"커밋"요청으로 구성된 FIFO와 비슷한 채널을 만들 수 있습니다. 이 경우 한 번에 하나의 클라이언트 만 수정할 수 있습니다 (다른 모든 클라이언트는 대기해야합니다). 동시에 업데이트 된 행을 추적해야합니다 (새 행은 그렇지 않을 수도 있습니다). 충돌하는 변경 사항이있는 경우 (사용자가 다른 사용자가 이미 수정 한 행을 수정하려는 경우) 고객은 고객에 대해 알아야합니다 (또는 고객이 이러한 변경 사항을 자동 병합하려고 시도 할 수 있음).

- 파벨

0

두 개의 업데이트가 동일한 데이터에 대해 발생했을 경우에 슬로우됩니다 Linq에 ChangeConflictException 클래스에서보세요. 이를 사용하여 충돌 해결 코드를 입력 할 수 있습니다. 예를 들어 두 판매원이 동일한 고객에게 제품을 판매하는 경우 식별자를 변경 한 다음 다시 커밋을 시도 할 수 있습니다. 또는 변경 사항을 완전히 덮어 쓸 수 있습니다.이 경우 새 값을 검색 한 다음 커밋 할 수 있습니다.

다른 경로는 상호 배타적이며 실행시 일관성을 보장하는 저장 프로 시저를 만드는 것일 수 있습니다. 당신이 linq을 사용하지 않아도 그런 식으로, 당신은 변경 사항의 일부 구문 분석을 수행하고 DB를 상대로 적절한 SPROC를 실행하여 주문을 삽입하거나 고객 세부 사항을 업데이트 할 수 있습니다.

응용 프로그램의 동시 처리는 디자인 타임에 코드가 제대로 작동하도록 처리해야합니다.