다음을 통해 공유


ASP.NET에서 워크플로 사용

Windows Workflow Foundation은 다양한 호스트 응용 프로그램 환경에서 실행되도록 만들어졌습니다. ASP.NET Web Forms은 이러한 지원되는 환경 중 하나입니다. 그러나 Windows Workflow Foundation용 웹 기반 호스팅 응용 프로그램을 만드는 경우 ASP.NET 응용 프로그램과 기존의 Windows Form 응용 프로그램의 주요 아키텍처 차이를 고려하여 호스팅 인프라를 디자인해야 합니다. 예를 들어, ASP.NET 응용 프로그램은 한 번에 몇 명의 동기 사용자에게 서비스를 제공할 수 있습니다. 이와 같은 서버 환경에서는 사용 가능한 시스템 메모리를 효율적으로 사용하는 방식으로 응용 프로그램을 디자인해야 합니다. Windows Workflow Foundation에서는 이러한 경우에 워크플로 인스턴스를 언로드하기 위해 SqlWorkflowPersistenceService 서비스를 제공합니다. 또한 ASP.NET은 요청을 받으면 응답을 보냅니다. 기본적으로 워크플로는 워크플로 런타임에서 비동기 방식으로 실행됩니다. 이 때문에 워크플로가 완료되기 전에 페이지가 렌더링될 수 있고 응답이 전송될 수 있습니다. 이를 방지하기 위해 Windows Workflow Foundation에서는 워크플로를 동기적으로 실행하기 위해 ManualWorkflowSchedulerService 서비스를 제공합니다. 이를 통해 Web Form은 워크플로 상태 정보를 사용자에게 반환할 수 있습니다.

WorkflowRuntime 개체 만들기

ASP.NET에서 Global.asax 파일을 사용하여 웹 응용 프로그램이 시작되거나 종료될 때 발생하는 개별 웹 세션이나 이벤트와 관련된 Web Form 이벤트를 처리할 수 있습니다. ASP.NET에서 Session 개체는 웹 페이지를 요청하는 각 사용자에 대해 만들어지며 Application 개체는 각 세션 전반에서 공유되는 단일 개체입니다. 다음 예제에서는 Application_Start 이벤트를 처리하여 WorkflowRuntime 인스턴스를 만들고 ManualWorkflowSchedulerService를 추가하는 방법을 보여 줍니다. 이 작업이 완료되고 런타임이 StartRuntime 메서드를 사용하여 시작된 후 WorkflowRuntime 인스턴스를 ASP.NET과 함께 제공되는 Application 개체에 저장할 수 있습니다. 응용 프로그램에서 이후에 웹 페이지를 요청할 때 이 단일 WorkflowRuntime 인스턴스를 검색하여 워크플로를 시작할 수 있습니다.

void Application_Start(object sender, EventArgs e) 
{
    System.Workflow.Runtime.WorkflowRuntime workflowRuntime =
        new System.Workflow.Runtime.WorkflowRuntime();

    System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService manualService =
        new System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService();
    workflowRuntime.AddService(manualService);
    
    workflowRuntime.StartRuntime();

    Application["WorkflowRuntime"] = workflowRuntime;           
}

응용 프로그램이 완료되면 ASP.NET에서 Application_End 이벤트가 발생합니다. 다음 코드에서는 StopRuntime 메서드를 호출하기 위해 Application_Start 이벤트 중에 만들어지는 WorkflowRuntime 개체를 검색하는 방법을 보여 줍니다.

void Application_End(object sender, EventArgs e) 
{
    System.Workflow.Runtime.WorkflowRuntime workflowRuntime =
        Application["WorkflowRuntime"] as System.Workflow.Runtime.WorkflowRuntime;
    workflowRuntime.StopRuntime();
}

ASP.NET Web Forms에서 워크플로 시작

이전 단원에서는 WorkflowRuntime 인스턴스가 Application_Start 이벤트 중에 만들어졌습니다. 이 개체는 웹 응용 프로그램이 요청을 처리하는 동안 유지됩니다. 다음 코드에서는 ASP.NET의 Application 개체에서 WorkflowRuntime 인스턴스를 검색하는 방법을 보여 줍니다. 이 작업을 수행한 후 GetService 메서드를 사용하여 워크플로를 동기적으로 실행하기 위해 워크플로를 시작하는 데 사용되는 ManualWorkflowSchedulerService를 검색합니다. 이렇게 하려면 WorkflowRuntime 클래스에 정의된 CreateWorkflow 메서드를 호출한 다음 CreateWorkflow 호출에서 반환된 WorkflowInstance 개체에서 Start 메서드를 호출합니다. ManualWorkflowSchedulerServiceWorkflowRuntime에 추가되었기 때문에 RunWorkflow 메서드를 호출하여 WorkflowInstance 개체의 InstanceId를 전달합니다.

protected void StartRuntime_Click(object sender, EventArgs e)
{
    WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;
    ManualWorkflowSchedulerService manualScheduler = 
        workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) 
        as ManualWorkflowSchedulerService;

    WorkflowInstance instance = workflowRuntime.CreateWorkflow(
        typeof(ASPNetSequentialWorkflow));
    instance.Start();
    manualScheduler.RunWorkflow(instance.InstanceId);
}

참고 항목

참조

WorkflowRuntime
ManualWorkflowSchedulerService
GetService
RunWorkflow
WorkflowInstance
StartRuntime

개념

방법: 워크플로 서비스 추가 및 제거

기타 리소스

ASP.NET 워크플로 응용 프로그램 개발

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.