다음을 통해 공유


Workflow Serialization 샘플

Download sample

이 샘플에서는 선언적 워크플로를 serialize하는 방법과 워크플로를 deserialize하고 실행하는 방법을 보여 줍니다. 선언적 워크플로는 표준 코드 파일에서가 아니라 워크플로 개체 모델을 사용하여 만듭니다.

Program.cs의 Main 메서드에서 프로그래밍 방식으로 워크플로 인스턴스가 만들어지며 ConsoleActivity 유형의 사용자 지정 활동이 추가됩니다. 선언적 워크플로에 대해 사용 가능한 코드 병행이 없으므로 코드 처리기 루틴이 있는 코드 동작 대신 재정의된 Execute 메서드가 있는 사용자 지정 활동을 사용해야 합니다. 이 샘플에서 사용하는 간단한 사용자 지정 활동은 StringToWrite라는 문자열 속성을 받아 실행 시 그 문자열을 콘솔에 출력합니다.

그런 다음 WorkflowMarkupSerializer를 사용하여 워크플로가 마크업(XAML) 파일로 serialize됩니다. 사용자 지정 활동은 String 형식의 속성만 가지므로 이 워크플로에서는 사용자 지정 serializer가 필요 없습니다. 복합 형식의 속성을 가진 활동을 serialize하는 방법에 대한 자세한 내용은 Custom Serialization 샘플을 참조하십시오.

그런 다음, 마크업 파일을 deserialize하여 새 워크플로 인스턴스를 만듭니다. deserializer는 필요 없으며 그 대신 CreateWorkflow 함수의 재정의가 사용됩니다. 이 재정의는 마크업 파일을 가리키는 XmlReader 개체를 가져옵니다.

기본적으로 CreateWorkflow 메서드는 워크플로 유효성 검사도 실시하며, 오류가 발견될 경우 WorkflowValidationFailedException이 throw됩니다.

마지막으로, 워크플로가 시작되며 ConsoleActivityStringToWrite 속성이 콘솔에 기록됩니다.

기본적으로 CreateWorkflow는 만들어진 모든 워크플로 인스턴스에 대해 유효성 검사를 수행합니다. 응용 프로그램이 이 동작을 최적화하고 직접 유효성 검사를 관리하기로 결정한 경우 WorkflowRuntimeSection.ValidateOnCreate 속성을 사용하여 기본 유효성 검사를 비활성화할 수 있습니다. 대신 다음 코드를 사용하여 워크플로의 유효성을 검사할 수 있습니다.

// Get the type of the workflow and extract the validator attribute from it
Type workflowType = workflow.GetType();
ActivityValidatorAttribute validatorAttribute = (ActivityValidatorAttribute)workflowType.GetCustomAttributes(typeof(ActivityValidatorAttribute), true)[0];

// Load the validator type and create an instance of the validator
Type validatorType = Type.GetType(validatorAttribute.ValidatorTypeName);
Validator validator = (Validator)Activator.CreateInstance(validatorType);

// Create validation manager and validate the workflow
ValidationManager manager = new ValidationManager(workflowRuntime, true);
ValidationErrorCollection validationErrors = validator.Validate(manager, workflow);

또한 이 샘플에서는 사용자 지정 형식이 사용되지 않으므로 워크플로를 deserialize하는 데 형식 공급자가 필요 없습니다. 형식 공급자가 필요하게 될 경우 다음 코드 조각을 사용하여 추가할 수 있습니다.

// Push a type provider to resolve a referenced assembly
// The type provider is not necessary in this case, 
// since the referenced assembly is already loaded in the appdomain
// but it is shown for general purpose applications. 
TypeProvider typeProvider = new TypeProvider(null);
typeProvider.AddAssembly(typeof(ConsoleActivity).Assembly);
workflowRuntime.AddService(typeProvider);

이 샘플을 빌드하려면

  1. 샘플 다운로드를 클릭하여 샘플을 다운로드합니다.

    이렇게 하면 샘플 프로젝트가 로컬 하드 디스크에 추출됩니다.

  2. 시작을 클릭하고 프로그램, Microsoft Windows SDK를 차례로 가리킨 다음 CMD 셸을 클릭합니다.

  3. 샘플의 소스 디렉터리로 이동합니다.

  4. 명령 프롬프트에서 **MSBUILD <Solution file name>**을 입력합니다.

이 샘플을 실행하려면

  • SDK 명령 프롬프트 창에서 샘플의 주 폴더 아래에 있는 HostApplication\bin\debug 폴더 또는 HostApplication\bin 폴더(VB 버전의 샘플의 경우)의 .exe 파일을 실행합니다.

참고 항목

참조

WorkflowMarkupSerializer

기타 리소스

Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
마크업 샘플

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.