오케스트레이션의 지속성
오케스트레이션 엔진은 다양한 지속성 포인트에서 오케스트레이션 인스턴스의 전체 상태를 저장하여 오케스트레이션 인스턴스의 리하이드레이션을 가능하게 합니다. 상태에는 오케스트레이션에서 사용될 수 있는 모든 .NET 기반 구성 요소와 메시지 및 변수가 포함됩니다. 엔진은 다음 지속성 포인트에서 상태를 저장합니다.
트랜잭션 범위의 끝(원자성 또는 장기 실행)
디버깅 중단점
Start Orchestration 셰이프를 통한 다른 오케스트레이션 실행
Send 셰이프(원자성 트랜잭션 제외)
오케스트레이션 인스턴스가 일시 중단될 때
제어된 방식으로 시스템이 종료될 때
엔진이 디하이드레이션을 결정할 때
오케스트레이션 인스턴스가 완료될 때
지속성 포인트는 비용이 많이 들기 때문에 엔진은 특히 큰 메시지를 처리할 경우 지속성 포인트 수를 최적화합니다. 아래의 두 오케스트레이션 인스턴스에 표시된 대로 원자성 범위의 Send 셰이프가 있는 오케스트레이션에서는 엔진이 트랜잭션 범위의 끝과 오케스트레이션 끝 사이에 하나의 지속성 포인트를 결정합니다. 다른 오케스트레이션에는 첫 번째 Send 셰이프와 Send 셰이프 및 오케스트레이션 끝에 대해 각각 하나씩, 두 개의 지속성 포인트가 있습니다.
오케스트레이션 지속성
직접 또는 간접적으로 오케스트레이션에서 사용하는 모든 .NET 기반 개체는 원자성 범위에서 호출되지 않거나 개체가 상태 비저장이고 정적 메서드를 통해서만 호출되는 경우 serializable로 표시되어야 합니다. System.Xml. XmlDocument는 특별한 경우이며 scope 트랜잭션 속성에 관계없이 직렬화 가능으로 표시할 필요가 없습니다.
System.Xml 대한 특수 처리는 어떻게 합니까 ? XmlDocument 작업:
사용자가 T 형식의 변수 X를 정의하는 경우 T는 System.Xml. XmlDocument 또는System.Xml 파생된 클래스입니다 . 그런 다음 XmlDocument 컴파일러는 X를 직렬화 가능한 개체로 처리합니다.
X를 직렬화할 때 런타임은 다음 정보를 유지합니다. (a) X 개체의 실제 형식 Tr이 (b) 문서의 OuterXml 문자열을 참조합니다.
X를 직렬화 해제할 때 런타임은 Tr의 instance 만들고(매개 변수를 사용하지 않는 생성자를 가정합니다) 저장된 OuterXml을 사용하여 instance 제공하는 LoadXml을 호출합니다. 그런 다음 X는 새로 만든 Tr instance 가리키도록 설정됩니다.