ASP.NET工作流的創(chuàng)建與啟動
創(chuàng)建 Windows Workflow Foundation 是為了在不同的宿主應(yīng)用程序環(huán)境中運行。 ASP.NET Web 窗體就是一種這樣的支持環(huán)境。 但是,當(dāng)為 Windows Workflow Foundation 創(chuàng)建基于 Web 的宿主應(yīng)用程序時,必須設(shè)計宿主基礎(chǔ)結(jié)構(gòu)以解決 ASP.NET 應(yīng)用程序和傳統(tǒng) Windows 窗體應(yīng)用程序之間的關(guān)鍵體系結(jié)構(gòu)差異。 例如,ASP.NET 應(yīng)用程序可以同時為多個同步的用戶提供服務(wù)。 在這種服務(wù)器環(huán)境中,應(yīng)用程序的設(shè)計方式必須有效地利用可用的系統(tǒng)內(nèi)存。 這些情況下,Windows Workflow Foundation 提供卸載工作流實例的 SqlWorkflowPersistenceService 服務(wù)。 另外,ASP.NET 在收到請求時會發(fā)出響應(yīng)。 默認(rèn)情況下,工作流運行時以異步方式執(zhí)行工作流。 因此,可能會在工作流完成之前呈現(xiàn)頁面和發(fā)送響應(yīng)。 為了避免這種情況,Windows Workflow Foundation 提供 ManualWorkflowSchedulerService 服務(wù)以便同步運行工作流。 這使您的 Web 窗體能夠?qū)⒐ぷ髁鳡顟B(tài)信息返回給用戶。
ASP.NET工作流的創(chuàng)建:創(chuàng)建 WorkflowRuntime 對象
使用 ASP.NET 中的 Global.asax 文件可以處理與開始和結(jié)束 Web 應(yīng)用程序時引發(fā)的各個 Web 會話或事件相關(guān)的 Web 窗體事件。 ASP.NET 中的 Session 對象是為每個請求 Web 頁的用戶創(chuàng)建的,Application 對象是在每個會話中共享的單個對象。 下面的示例演示如何處理 Application_Start 事件以創(chuàng)建 WorkflowRuntime 實例和添加 ManualWorkflowSchedulerService。 完成此操作后,通過使用 StartRuntime 方法啟動運行時,您可以將 WorkflowRuntime 實例保存到隨 ASP.NET 一起提供的 Application 對象中。 在以后對應(yīng)用程序中 Web 頁的請求中,您可以檢索此單個 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;
- }
當(dāng)應(yīng)用程序完成時,ASP.NET 引發(fā) Application_End 事件。 下面的代碼演示如何檢索在 Application_Start 事件期間創(chuàng)建的 WorkflowRuntime 對象,以便調(diào)用 StopRuntime 方法。
- void Application_End(object sender, EventArgs e)
- {
- System.Workflow.Runtime.WorkflowRuntime workflowRuntime =
- Application["WorkflowRuntime"] as System.Workflow.Runtime.WorkflowRuntime;
- workflowRuntime.StopRuntime();
- }
ASP.NET工作流的啟動:在 ASP.NET Web 窗體中啟動工作流
在上一節(jié)中,在 Application_Start 事件期間創(chuàng)建了 WorkflowRuntime 實例。 在 Web 應(yīng)用程序處理請求時,會一直保留此對象。 下面的代碼演示如何從 ASP.NET 中的 Application 對象中檢索 WorkflowRuntime 實例。 之后,使用 GetService 方法檢索用于啟動工作流的 ManualWorkflowSchedulerService,以便同步運行工作流。 為此,調(diào)用在 WorkflowRuntime 類中定義的 CreateWorkflow 方法,隨后調(diào)用從 CreateWorkflow 調(diào)用中返回的 WorkflowInstance 對象中的 Start 方法。 由于將 ManualWorkflowSchedulerService 添加到了 WorkflowRuntime,因此調(diào)用 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);
- }
以上就介紹了ASP.NET工作流的創(chuàng)建與啟動。
【編輯推薦】