다음을 통해 공유


낙관적 동시 실행을 사용하여 데이터 손실 가능성 줄이기

 

게시 날짜: 2016년 11월

적용 대상: Dynamics CRM 2015

Microsoft Dynamics 365 같은 다중 스레드 및 다중 사용자 시스템에서 데이터 변경은 종종 동시에 발생합니다. 동일한 데이터에서 둘 이상의 업데이트 또는 삭제 작업이 동시에 이루어질 때 문제가 발생합니다. 이 경우 데이터가 손실될 수 있습니다. 이 SDK 릴리스에서는 응용 프로그램이 레코드를 검색할 때와 레코드를 업데이트하거나 삭제하려고 할 때 사이의 시간에 서버에서 엔터티 레코드가 변경되었는지 감지하는 기능을 제공합니다.

참고

Microsoft Dynamics CRM Online 조직의 경우 이 기능은 조직이 Dynamics CRM Online 2015 업데이트 1로 업데이트된 경우에만 사용할 수 있습니다. 이 기능은 Dynamics CRM(온-프레미스)에서는 사용할 수 없습니다.

낙관적 동시 실행은 오프라인 동기화 및 모든 사용자 지정 엔터티에 활성화된 모든 기본 제공 엔터티에서 지원됩니다. SDK 호출을 통해 엔터티의 메타데이터를 검색하거나 특성 메타데이터 브라우저를 사용하여 메타데이터를 보고 낙관적 동시 실행을 지원하는지 확인하고 IsOptimisticConcurrencyEnabledtrue로 설정되었는지 확인할 수 있습니다. 사용자 지정 엔터티의 경우 기본적으로 이 속성은 true로 설정됩니다.조직에 대한 엔터티 메타데이터를 보려면 조직에 대한 메타데이터 찾아보기에 설정된 메타데이터 브라우저 솔루션을 설치하십시오. SDK 다운로드의 최상위 폴더에 포함된 EntityMetadata.xlsx라는 Excel 파일에서 사용자 지정되지 않은 조직의 메타데이터를 볼 수도 있습니다.

이 항목의 내용

낙관적 동시 실행 사용

레코드 업데이트 또는 삭제

예외 처리

낙관적 동시 실행 사용

요청의ConcurrencyBehavior 속성을 IfRowVersionMatches로 설정하여 UpdateRequest를 실행할 때 낙관적 동시 실행 확인 동작을 사용할 수 있습니다. 마찬가지로 DeleteRequest의 경우 ConcurrencyBehavior 속성을 설정합니다.

조직 서비스 컨텍스트를 사용하여 데이터를 변경할 때 OrganizationServiceContext 개체에서 ConcurrencyBehavior를 설정합니다. 이 값은 SaveChanges가 호출될 때 OrganizationServiceContext에서 사용된 모든 UpdateRequestDeleteRequest 메시지를 통해 전달됩니다.

낙관적 동시 실행 동작은 SDK 호출을 통해서만 설정할 수 있습니다. 현재 웹 응용 프로그램의 형태로 설정되지 않았습니다.

레코드 업데이트 또는 삭제

엔터티 레코드를 검색한 후 RowVersion 특성에 액세스하여 해당 레코드의 현재 버전을 얻습니다.UpdateRequest에서 Target로 사용하는 엔터티 개체에서 RowVersion 속성을 검색된 레코드의 같은 값으로 설정하고 요청을 실행합니다. 마찬가지로 DeleteRequest에서 Target로 사용하는 엔터티 참조 개체에서 RowVersion 속성을 검색된 레코드의 같은 행 버전으로 설정하고 요청을 실행합니다.

UpdateRequest에 전달된 엔터티에 관련 엔터티가 포함된 경우 각 개별 엔터티와 함께 제공된 행 버전을 사용하여 모든 업데이트 작업에 같은 동작이 적용됩니다.

플랫폼에 의해 요청이 검색되면 현재 엔터티 레코드 행 버전과 요청의 행 버전의 비교가 수행됩니다. 행 버전이 일치하고 ConcurrencyBehaviorIfRowVersionMatches로 설정된 경우 작업이 성공합니다. 그렇지 않으면 결함 예외가 반환됩니다.

예외 처리

낙관적 동시 실행을 사용할 때 웹 서비스 호출에서 FaultException<OrganizationServiceFault>로부터 반환될 수 있는 여러 가지 오류 조건이 있습니다.

  • ConcurrencyVersionMismatch (코드 = 2147088254)

    행 버전이 제공되고 IfVersionMatches 동작이 표시되면 기존 레코드의 버전이 요청에 제공되는 행 버전과 일치하지 않는 경우 오류가 반환됩니다.

  • ConcurrencyVersionNotProvided (코드 =-2147088253

    IfVersionMatches 동작이 표시되고 행 버전의 값이 제공되지 않으면 오류가 반환됩니다.

  • OptimisticConcurrencyNotEnabled (코드 = 2147088243)

    IfVersionMatches 동작이 엔터티에 대한 업데이트에 표시되고 낙관적 동시 실행이 활성화되지 않으면 오류가 반환됩니다.

반환된 오류의 코드 속성을 확인하여 오류가 낙관적 동시 실행과 관련이 있는지 확인할 수 있습니다. 이전에 표시된 오류 조건에 대한 코드는 ErrorCodes.cs 도우미 코드에서 얻은 것입니다.

참고 항목

응용 프로그램 및 서버 확장 작성
샘플: 업데이트 및 삭제 작업에 낙관적 동시 실행 사용

© 2017 Microsoft. All rights reserved. 저작권 정보