2010-01-19 3 views
2

ASP.NET 응용 프로그램에서 리 호스트 된 워크 플로 디자이너를 사용하여 기본적으로 Atlas Workflow Monitor과 비슷한 방식으로 WorkflowMonitor 샘플을 채택하여 워크 플로 이미지를 생성했습니다. 이제 라이브러리의 설치된 버전이 이전 워크 플로 정의 (특히 워크 플로의 XOML이 포함 된 데이터베이스 내의 추적 된 워크 플로 및 기록 항목)의 원래 버전과 더 이상 일치하지 않는 경우 재배포 후이 솔루션의 동작에 대해 걱정하기 시작했습니다. 과거에 실행). 한 가지 주목할만한 점은 여러 버전의 워크 플로를 동시에 사용하는 것에 대해 article을 읽었으며 이전 정의가 포함 된 워크 플로를 실제로 실행하고 싶지 않기 때문에 이것이 정확히 필요하지 않다는 것입니다. 다이어그램. (재 호스팅 된) 워크 플로우 디자이너의 이전 버전의 활동 라이브러리에서 워크 플로우를 사용하려면 어떻게해야합니까?

  1. 워크 플로 나는 여전히 라이브러리의 실제 버전이 단순히 데이터베이스에 비트 맵으로 저장/종료를 완료 할 때 워크 플로 디자이너에서 스크린 샷 찍기 : 난 그냥이 솔루션을 보았다.
  2. 이전 버전의 라이브러리를 별도의 폴더에 보관하면 설계자가로드 할 수있어 이전 작업 흐름의 다이어그램이 현재 어셈블리 버전에 더 이상 존재하지 않아도 다이어그램을 생성 할 수 있습니다. 내가 낭비 공간을 피하기 위해 원으로

은 (솔루션은 1), 나는 내가 WorkflowMarkupSerializer 또는 WorkflowDesignSurface에 대한 TypeProvider 서비스를 사용하여 몇 가지 예제를 발견하고이를 사용하려고 한 최초의 솔루션 2를 사용하기로 결정했습니다. 불행히도, 새로운 라이브러리에서 액티비티가 제거되고 오래된 라이브러리가이 TypeProvider와 함께로드되고 작동하지 않는 것처럼 보이는 경우 WorkflowMarkupSerializer를 직접 사용하여 XOML을 읽는 경우 다이어그램에서 누락 된 액티비티가 제외됩니다 SqlTrackingService를 사용하여 일부 추적 된 인스턴스를로드 할 때 활동 유형이 누락되었다는 예외가 발생합니다 (내부적으로 WorkflowMarkupSerializer의 동일한 메서드를 사용하는 것으로 보이지만).

TypeProvider를 어떻게 사용해야하는지에 대한 경험이 있습니까? 감사합니다;)

답변

1

TypeProviders는 워크 플로 렌더링에 대해 누락 된 어셈블리 참조를 확인하고 이전 활동 등의 추적 정보에 액세스하는 신뢰할 수있는 방법이 아닙니다. 문제는 SqlTrackingService에서 작동하지 않을뿐만 아니라 AppDomain에로드해야하는 TypeProvider로 어셈블리를 전달할 수 있다는 것입니다. AppDomain에 동일한 어셈블리의 여러 버전이 있으면 미친 일이 발생하므로이를 피하는 것이 절대적으로 필요합니다.

로드 된 AppDomain에서 어셈블리를 언로드 할 수는 없지만 필요하면 이전 버전의 어셈블리를로드하는 독립 AppDomain을 만들 수 있습니다 (이 작업을 AssemblyResolve 이벤트에 등록했습니다). AppDomain)을 실행 한 다음 작업이 완료되면 AppDomain 전체를 언로드해야합니다. 이를 수행하는 방법에 대한 예는 관련 question을 참조하십시오.

이제 행복하게 다른 버전의 활동 라이브러리에서 다이어그램을 보여 드리겠습니다;)

+0

"다른 버전의 다이어그램을 보여줍니다", asp.net을 사용하고 있습니까? 어떤 다이어그램 라이브러리를 사용합니까? –

+0

예, asp.net 및 re-hosted 표준 WF 디자이너 ..이 Atlas Workflow Monitor 샘플을 기반으로합니다 (위의 링크 참조). –

관련 문제