.NET Framework 4.5의 WF(Windows Workflow Foundation)에는 새로운 활동, 디자이너 기능 및 워크플로 개발 모델과 같은 많은 새로운 기능이 도입되었습니다. .NET Framework 4.5에 도입된 새로운 워크플로 기능 중 대부분은 다시 호스팅된 워크플로 디자이너에서 지원됩니다. 지원되는 새로운 기능에 대한 자세한 내용은 다시 호스트된 워크플로 디자이너의 새 Workflow Foundation 4.5 기능 지원을 참조하세요. 최신 버전을 사용하도록 .NET Framework 3.0 및 .NET Framework 3.5 워크플로 애플리케이션을 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 지침을 참조하세요. 이 문서에서는 .NET Framework 4.5에 도입된 새로운 워크플로 기능에 대한 개요를 제공합니다.
경고
.NET Framework 4.5에 도입된 새로운 Windows Workflow Foundation 기능은 이전 버전의 프레임워크를 대상으로 하는 프로젝트에는 사용할 수 없습니다. .NET Framework 4.5를 대상으로 하는 프로젝트가 이전 버전의 프레임워크로 대상을 변경하면 몇 가지 문제가 발생할 수 있습니다.
- C# 식은 디자이너에서 값이 XAML에서 설정되었습니다.라는 메시지로 대체됩니다.
- 다음 오류를 포함하여 많은 빌드 오류가 발생합니다.
파일 형식은 현재 대상 지정 프레임워크와 호환되지 않습니다. 파일 형식을 변환하려면 파일을 명시적으로 저장하세요. 이 오류 메시지는 파일을 저장하고 디자이너를 다시 연 후에 사라지게 됩니다.
워크플로 버전 관리
.NET Framework 4.5에는 새 클래스를 기반으로 하는 몇 가지 새로운 WorkflowIdentity 버전 관리 기능이 도입되었습니다. WorkflowIdentity 에서는 워크플로 애플리케이션 작성자에게 지속형 워크플로 인스턴스를 해당 정의와 매핑하는 메커니즘을 제공합니다.
호스팅을 사용하는 WorkflowApplication 개발자는 여러 버전의 워크플로를 나란히 호스팅하는 데 사용할 WorkflowIdentity 수 있습니다. 새로운 WorkflowApplicationInstance 클래스를 사용하여 지속형 워크플로 인스턴스를 로드할 수 있으며, 그런 다음 DefinitionIdentity을 호스트에서 사용하여 WorkflowApplication의 인스턴스를 생성할 때 워크플로 정의의 올바른 버전을 제공할 수 있습니다. 자세한 내용은 WorkflowIdentity 및 버전 관리 사용 및방법: 여러 버전의 워크플로를 병렬로 호스트하는 방법을 참조하세요.
WorkflowServiceHost 는 이제 다중 버전 호스트입니다. 워크플로 서비스의 새 버전이 배포되면 새 서비스를 사용하여 새 인스턴스가 만들어지지만 기존 인스턴스는 이전 버전을 사용하여 완료됩니다. 자세한 내용은 WorkflowServiceHost에서 Side by Side 버전 관리를 참조하세요.
지속형 워크플로 인스턴스의 정의를 업데이트하는 메커니즘을 제공하는 동적 업데이트가 도입되었습니다. 자세한 내용은 동적 업데이트 및 방법: 실행 중인 워크플로 인스턴스의 정의 업데이트를 참조하세요.
.NET Framework 4 데이터베이스 스크립트를 사용하여 만들어진 지속성 데이터베이스를 업그레이드하기 위해 SqlWorkflowInstanceStoreSchemaUpgrade.sql 데이터베이스 스크립트가 제공됩니다. 이 스크립트는 .NET Framework 4.5에 도입된 새 버전 관리 기능을 지원하도록 .NET Framework 4 지속성 데이터베이스를 업데이트합니다. 데이터베이스의 지속형 워크플로 인스턴스에는 기본 버전 관리 값이 지정되며 병렬 실행 및 동적 업데이트에 참여할 수 있습니다. 자세한 내용은 워크플로 버전 관리를 지원하도록 .NET Framework 4 지속성 데이터베이스 업그레이드를 참조하세요.
활동
기본 제공 활동 라이브러리에는 새 활동과 기존 활동에 대한 새로운 기능이 포함되어 있습니다.
NoPersist 범위
NoPersistScope 는 NoPersistScope의 자식 활동이 실행될 때 워크플로가 유지되지 않도록 하는 새 컨테이너 작업입니다. 워크플로가 파일 핸들과 같은 컴퓨터별 리소스를 사용하는 경우 또는 데이터베이스 트랜잭션 중에 워크플로를 유지하는 것이 적절하지 않은 시나리오에서 유용합니다. 이전에는 활동을 실행하는 동안 지속성이 발생하지 않도록 하려면 NoPersistHandle 를 사용하는 사용자 지정 NativeActivity 가 필요했습니다.
새 순서도 기능
순서도가 .NET Framework 4.5에 맞춰 업데이트되었으며, 다음과 같은 새로운 기능이 있습니다.
DisplayName또는 FlowSwitch<T> 활동의 FlowDecision 속성을 편집할 수 있습니다. 이렇게 하면 활동 디자이너가 활동의 목적에 대한 자세한 정보를 표시할 수 있습니다.순서도에는 ValidateUnconnectedNodes라는 새 속성이 있습니다. 이 속성의 기본값은
False입니다. 이 속성이True으로 설정되면, 연결되지 않은 순서도 노드는 유효성 검사 오류를 발생시킵니다.
부분 신뢰 지원
.NET Framework 4의 워크플로에는 완전히 신뢰할 수 있는 애플리케이션 도메인이 필요했습니다. .NET Framework 4.5에서 워크플로는 부분 신뢰 환경에서 작동할 수 있습니다. 부분 신뢰 환경에서는 타사 구성 요소를 호스트의 리소스에 대한 모든 액세스 권한을 부여하지 않고 사용할 수 있습니다. 부분 신뢰에서 워크플로를 실행하는 방법에 대한 몇 가지 우려 사항은 다음과 같습니다.
활동에 포함된 Interop 레거시 구성 요소(규칙 포함)를 사용하는 것은 부분 신뢰에서 지원되지 않습니다.
부분 신뢰 WorkflowServiceHost 에서 워크플로 실행은 지원되지 않습니다.
부분 신뢰 시나리오에서 예외를 유지하는 것은 잠재적인 보안 위협입니다. 예외 지속을 사용하지 않도록 설정하려면 예외 지속을 옵트아웃하기 위해 형식 ExceptionPersistenceExtension 확장을 프로젝트에 추가해야 합니다. 다음 코드 예제에서는 이 형식을 구현하는 방법을 보여 줍니다.
public class ExceptionPersistenceExtension { public ExceptionPersistenceExtension() { this.PersistExceptions = false; } public bool PersistExceptions { get; set; } }예외를 직렬화하지 않을 경우, 예외가 NoPersistScope 내에서 사용되도록 하십시오.
액티비티 작성자는 워크플로 런타임이 형식에 대해 자동으로 리플렉션을 작동하지 않도록 CacheMetadata를 재정의해야 합니다. 인수 및 자식 활동은 null이 아니어야 하며, Bind는 명시적으로 호출해야 합니다. 재정의 CacheMetadata에 대한 자세한 내용은 CacheMetadata를 사용하여 데이터를 노출하는 방법을 참조하세요. 또한,
internal또는 형식의 인수 인스턴스는 리플렉션에 의해 생성되지 않도록 CacheMetadata에서 명시적으로 생성해야 합니다.형식은 ISerializable 또는 SerializableAttribute을 사용하여 직렬화하지 않습니다. 직렬화할 형식은 DataContractSerializer를 지원해야 합니다.
LambdaValue<TResult>를 사용하는 식은 RestrictedMemberAccess이 필요하므로 부분 신뢰 환경에서 작동하지 않습니다. LambdaValue<TResult>를 사용하는 워크플로는 그 표현을 CodeActivity<TResult>에서 파생된 활동으로 교체해야 합니다. .
부분 신뢰에서 Visual Basic 호스팅 컴파일러를 사용하여 TextExpressionCompiler 식을 컴파일할 수 없지만 이전에 컴파일된 식을 실행할 수 있습니다.
수준 2 투명도를 사용하는 단일 어셈블리는 .NET Framework 4, 완전 신뢰의 .NET Framework 4.6.1 및 부분 신뢰의 .NET Framework 4.6.1에서 사용할 수 없습니다.
새 디자이너 기능
디자이너 검색
더 큰 워크플로를 관리하기 위해 이제 키워드로 워크플로를 검색할 수 있습니다. 이 기능은 Visual Studio에서만 사용할 수 있습니다. 이 기능은 다시 호스팅된 디자이너에서 사용할 수 없습니다. 다음과 같은 두 가지 종류의 검색을 사용할 수 있습니다.
Ctrl+F 또는 편집 메뉴에서 찾기 및 바꾸기 또는 빠른 찾기를 사용하여 시작된 빠른 찾기.
파일에서 찾기, Ctrl+Shift+F 또는 편집, 찾기 및 바꾸기, 파일에서 찾기로 시작합니다.
Replace는 지원되지 않습니다.
빠른 찾기
워크플로에서 검색된 키워드는 다음 디자이너 항목과 일치합니다.
Activity 개체, FlowNode 개체, State 개체, Transition 개체 및 기타 사용자 지정 흐름 제어 항목의 속성입니다.
변수
Arguments
Expressions
빠른 찾기는 디자이너의 ModelItem 트리에서 수행됩니다. 빠른 찾기는 워크플로 정의에서 가져온 네임스페이스를 찾을 수 없습니다.
파일에서 찾기
워크플로에서 검색된 키워드는 워크플로 파일의 실제 콘텐츠와 일치합니다. 검색 결과는 Visual Studio 찾기 결과 보기 창에 표시됩니다. 결과 항목을 두 번 클릭하면 워크플로 디자이너의 일치 항목이 포함된 활동으로 이동합니다.
변수 및 인수 디자이너에서 상황에 맞는 메뉴 항목 삭제
.NET Framework 4에서는 키보드를 사용하여 디자이너에서만 변수와 인수를 삭제할 수 있습니다. .NET Framework 4.5부터 상황에 맞는 메뉴를 사용하여 변수 및 인수를 삭제할 수 있습니다.
다음 스크린샷은 변수 및 인수 디자이너 상황에 맞는 메뉴를 보여 줍니다.
시퀀스를 사용하여 자동 둘러싸기
워크플로 또는 특정 컨테이너 활동(예: NoPersistScope)은 단일 본문 활동만 포함할 수 있으므로 두 번째 활동을 추가하려면 개발자가 첫 번째 활동을 삭제하고 활동을 추가한 Sequence 다음 두 활동을 시퀀스 작업에 추가해야 했습니다. .NET Framework 4.5부터 디자이너 화면에 Sequence 두 번째 작업을 추가할 때 두 활동을 래핑하는 작업이 자동으로 만들어집니다.
다음 스크린샷은 WriteLine의 Body에서 NoPersistScope 활동을 보여줍니다.
다음 스크린샷은 첫 번째 작업 아래에 두 번째 Sequence 작업이 아래로 놓일 때 Body 내의 자동으로 생성된 WriteLine 작업을 보여줍니다.
팬 모드
디자이너에서 큰 워크플로를 보다 쉽게 탐색하려면 이동 모드를 사용하도록 설정하여 개발자가 스크롤 막대를 사용하지 않고도 워크플로의 표시되는 부분을 클릭하고 끌어서 이동할 수 있습니다. 팬 모드를 활성화하는 단추는 디자이너의 오른쪽 아래 모서리에 있습니다.
다음 스크린샷은 워크플로 디자이너의 오른쪽 아래 모서리에 있는 이동 단추를 보여 줍니다.
가운데 마우스 단추 또는 스페이스바를 사용하여 워크플로 디자이너를 이동해도 됩니다.
다중 선택
주위의 사각형을 끌거나(이동 모드가 활성화되지 않은 경우) Ctrl 키를 누른 상태에서 원하는 활동을 하나씩 클릭하여 여러 활동을 한 번에 선택할 수 있습니다.
디자이너 내에서 여러 활동 선택을 끌어서 놓을 수도 있으며 상황에 맞는 메뉴를 사용하여 상호 작용할 수도 있습니다.
워크플로 항목의 개요 보기
계층적 워크플로를 보다 쉽게 탐색할 수 있도록 워크플로의 구성 요소가 트리 스타일 개요 보기에 표시됩니다. 개요 보기는 문서 개요 보기에 표시됩니다. 이 보기를 열려면 위쪽 메뉴에서 보기, 기타 창, 문서 개요를 선택하거나 Ctrl W,U를 누릅니다. 개요 보기에서 노드를 클릭하면 워크플로 디자이너의 해당 활동으로 이동되고 개요 보기가 업데이트되어 디자이너에서 선택한 활동을 표시합니다.
시작 자습서 의 완료된 워크플로에 대한 다음 스크린샷은 순차 워크플로가 있는 개요 보기를 보여줍니다.
C# 식
.NET Framework 4.5 이전에는 워크플로의 모든 식을 Visual Basic에서만 작성할 수 있습니다. .NET Framework 4.5에서 Visual Basic 식은 Visual Basic을 사용하여 만든 프로젝트에만 사용됩니다. 이제 Visual C# 프로젝트는 식 표현에 C#을 사용합니다. 문법 강조 표시 및 인텔리센스(IntelliSense)와 같은 기능을 갖춘 C# 식 편집기가 완전한 기능으로 제공됩니다. Visual Basic 식을 사용하는 이전 버전에서 만든 C# 워크플로 프로젝트는 계속 작동합니다.
C# 식들은 디자인 타임에 검증됩니다. C# 식의 오류는 빨간색 물결선 밑줄로 표시됩니다.
C# 식에 대한 자세한 내용은 C# 식을 참조하세요.
셸 표시줄 및 헤더 항목의 가시성을 더 잘 제어하기
다시 호스트된 디자이너에서 일부 표준 UI 컨트롤은 지정된 워크플로에 대한 의미가 없을 수 있으며 해제될 수 있습니다. .NET Framework 4에서 이 사용자 지정은 디자이너 아래쪽의 셸 표시줄에서만 지원됩니다. .NET Framework 4.5에서는 디자이너 맨 위에 있는 셸 헤더 항목의 가시성을 적절한 WorkflowShellHeaderItemsVisibility 값으로 ShellHeaderItemsVisibility을 설정하여 조정할 수 있습니다.
순서도 및 상태 머신 워크플로에서 자동 연결 및 자동 삽입
.NET Framework 4에서는 순서도 워크플로의 노드 간 연결을 수동으로 추가해야 했습니다. .NET Framework 4.5에서 순서도 및 상태 시스템 노드에는 작업이 도구 상자에서 디자이너 화면으로 끌 때 표시되는 자동 연결 지점이 있습니다. 이러한 지점 중 하나에서 활동을 삭제하면 필요한 연결과 함께 활동이 자동으로 추가됩니다.
다음 스크린샷은 도구 상자에서 활동을 끌 때 표시되는 첨부 파일 지점을 보여 줍니다.
작업을 흐름도 노드와 상태 사이의 연결로 끌어 두 노드 사이에 자동으로 삽입할 수 있습니다. 다음 스크린샷은 도구 상자에서 활동을 끌어서 놓을 수 있는 연결선이 강조 표시된 모습을 보여줍니다.
디자이너 주석
더 큰 워크플로 개발을 용이하게 하기 위해 디자이너는 이제 디자인 프로세스를 추적하는 데 도움이 되는 주석 추가를 지원합니다. 주석은 활동, 상태, 순서도 노드, 변수 및 인수에 추가할 수 있습니다. 다음 스크린샷은 디자이너에 주석을 추가하는 데 사용되는 상황에 맞는 메뉴를 보여 줍니다.
디버깅 상태
.NET Framework 4에서 비활성 요소는 실행 단위가 아니므로 디버그 중단점을 지원할 수 없습니다. 이 릴리스는 State 개체에 중단점을 추가하는 메커니즘을 제공합니다. State에 중단점이 설정되면, 상태가 전환될 때 진입 활동이나 트리거가 예약되기 전에 실행이 중단됩니다.
디자이너에서 ActivityDelegate 개체 정의 및 사용
.NET Framework 4의 활동은 개체를 사용하여 ActivityDelegate 워크플로의 다른 부분이 워크플로의 실행과 상호 작용할 수 있는 실행 지점을 노출했지만 일반적으로 이러한 실행 지점을 사용하려면 상당한 양의 코드가 필요했습니다. 이 릴리스에서 개발자는 워크플로 디자이너를 사용하여 활동 대리자를 정의하고 사용할 수 있습니다. 자세한 내용은 방법: 워크플로 디자이너에서 활동 대리자 정의 및 사용 방법을 참조하세요.
빌드 시간 유효성 검사
.NET Framework 4에서 워크플로 유효성 검사 오류는 워크플로 프로젝트를 빌드하는 동안 빌드 오류로 계산되지 않았습니다. 즉, 워크플로 유효성 검사 오류가 있는 경우에도 워크플로 프로젝트를 빌드하는 데 성공할 수 있습니다. .NET Framework 4.5에서 워크플로 유효성 검사 오류로 인해 빌드가 실패합니다.
디자인 타임 배경 유효성 검사
.NET Framework 4에서 워크플로는 포그라운드 프로세스로 유효성을 검사하여 복잡하거나 시간이 많이 걸리는 유효성 검사 프로세스 중에 UI를 차단할 수 있습니다. 이제 UI가 차단되지 않도록 백그라운드 스레드에서 워크플로 유효성 검사가 수행됩니다.
XAML 파일의 별도 위치에 있는 상태 보기
.NET Framework 4에서 워크플로의 보기 상태 정보는 XAML 파일 전체에 여러 위치에 저장됩니다. XAML을 직접 읽거나 뷰 상태 정보를 제거하는 코드를 작성하려는 개발자에게는 불편합니다. .NET Framework 4.5에서 XAML 파일의 뷰 상태 정보는 XAML 파일에서 별도의 요소로 직렬화됩니다. 개발자는 작업의 뷰 상태 정보를 쉽게 찾아 편집하거나 뷰 상태를 완전히 제거할 수 있습니다.
표현식 확장성
.NET Framework 4.5에서는 개발자가 워크플로 디자이너에 연결할 수 있는 고유한 식 및 식 작성 환경을 만들 수 있는 방법을 제공합니다.
재호스팅된 디자이너에서 워크플로 4.5의 기능에 가입하세요.
이전 버전과의 호환성을 유지하기 위해 .NET Framework 4.5에 포함된 일부 새로운 기능은 다시 호스팅된 디자이너에서 기본적으로 사용하도록 설정되지 않습니다. 이는 재호스팅된 디자이너를 사용하는 기존 애플리케이션이 최신 버전으로 업데이트되었을 때 문제가 발생하지 않도록 하기 위한 것입니다. 재호스팅된 디자이너에서 새 기능을 사용하도록 설정하려면 TargetFrameworkName을 ".NET Framework 4.5"로 설정하거나, 개별 기능을 활성화하려면 개별 멤버를 설정 DesignerConfigurationService합니다.
새 워크플로 개발 모델
순서도 및 순차 워크플로 개발 모델 외에도 이 릴리스에는 State Machine 워크플로 및 계약 우선 워크플로 서비스가 포함됩니다.
상태 컴퓨터 워크플로
상태 시스템 워크플로는 Microsoft .NET Framework 4 플랫폼 업데이트 1에서 .NET Framework 4 버전 4.0.1의 일부로 도입되었습니다. 이 업데이트에는 개발자가 상태 시스템 워크플로를 만들 수 있는 몇 가지 새로운 클래스 및 활동이 포함되어 있습니다. 이러한 클래스 및 활동은 .NET Framework 4.5에 대해 업데이트되었습니다. 업데이트에는 다음이 포함됩니다.
상태에 중단점을 설정하는 기능
워크플로 디자이너에서 전환을 복사하고 붙여넣는 기능
공유 트리거 전환 생성에 대한 디자이너의 지원
State Machine 워크플로를 만드는 데 사용되는 활동(예: StateMachine, State및 Transition
다음 스크린샷은 시작 자습서 단계 방법: 상태 컴퓨터 워크플로 만들기의 완료된 상태 컴퓨터 워크플로를 보여 줍니다.
상태 컴퓨터 워크플로를 만드는 방법에 대한 자세한 내용은 상태 시스템 워크플로를 참조하세요.
계약 우선 워크플로 개발
계약 우선 워크플로 개발 도구를 사용하면 개발자가 먼저 코드에서 계약을 디자인한 다음 Visual Studio에서 몇 번의 클릭으로 각 작업을 나타내는 작업 템플릿을 도구 상자에 자동으로 생성할 수 있습니다. 그런 다음 이러한 활동을 사용하여 계약에서 정의한 작업을 구현하는 워크플로를 만듭니다. 워크플로 디자이너는 워크플로 서비스의 유효성을 검사하여 이러한 작업이 구현되고 워크플로의 서명이 계약 서명과 일치하는지 확인합니다. 개발자는 워크플로 서비스를 구현된 계약 컬렉션과 연결할 수도 있습니다. 계약 우선 워크플로 서비스 개발에 대한 자세한 내용은 방법: 기존 서비스 계약을 사용하는 워크플로 서비스 만들기를 참조하세요.
.NET