WF(Workflow foundation)與Asp.net結合

來源:互聯網
上載者:User
文章目錄
  • 步驟1
  • 步驟2
  • 步驟3
  • 步驟4
  • 運行結果如所示
  • 步驟1
  • 步驟2
  • 步驟3
  • 步驟4
  • 步驟5
案例1

本文參考WF (Windows Workflow Foundation) 工作流程學習(一)一個Asp.Net狀態機器驗證程式 通過本文本文的介紹,我們主要瞭解wf中的狀態機器statemachine在asp.net下的運行機制。

開發環境:win7+vs2008 sp1

步驟1

開啟VS2008,建立一個解決方案WfAndAspNet,然後在該解決方案中添加一個Asp.net web應用程式WebApplication和狀態機器工作流程庫WorkflowLibrary。如所示。

完整的解決方案。

其中AspNet和SequenceWorkflowLibrary是第二個項目用到的,這個稍後再提。

步驟2

為WorkflowLibray添加一個介面Interface1介面中只有一個方法:

string Validate(string Name);

步驟3

開啟WorkflowLibrary中的Workflow1.cs的設計檢視,在其中添加兩個狀態stateActivity1和stateActivity2,然後在Workflow1InitialState中添加EventDriven活動eventDrivenActivity1,在stateAcitvity1狀態中添加StateInitialzation活動stateInitialzationActivity1,如所示。

接著選中stateActivity2,右鍵以後會發現有“設定為初始狀態”和“設定為完成狀態”,在這裡我們選擇“設定為完成狀態”,這時候stateActivity2右上方的表徵圖會發生變化。

步驟4

雙擊eventDrivenActivity1活動,進入如下編輯檢視

在eventDrivenActivity1中添加WebServiceInput事件,將參數配置到活動中去,屬性如所示。

其中屬性中的參數,我是通過對話方塊建立的,點擊參數後面的小按鈕,會彈出下面的對話方塊,選擇“綁定到新成員”選項卡,建立屬性。配置方法如所示:

在stateInitialzationActivity1活動中添加WebServiceOutput活動,並配置屬性。如所示

雙擊webServiceOutputActivity1為這個活動添加代碼:

private void webServiceOutputActivity1_SendingOutput(object sender, EventArgs e)<br /> {<br /> string name = this.webServiceInputActivity1__Parameter_Name1;<br /> if (name == "xuwei")<br /> {<br /> this.webServiceOutputActivity1__ReturnValue_1 = "成功";<br /> }<br /> else<br /> {<br /> this.webServiceOutputActivity1__ReturnValue_1 = "失敗";<br /> }<br /> }

步驟 5

右鍵工作流程項目WorkflowLibrary-->選擇“作為Web 服務發布”,系統會自動產生一個Web Service。然後我們在asp.Net 程式中引用這個Web Service ,在Asp.Net 頁面添加幾個控制項,再編寫後台C#代碼,就可以調用這個狀態機器中的方法。

Default.aspx.cs代碼

namespace WebApplication<br />{<br /> public partial class _Default : System.Web.UI.Page<br /> {<br /> protected void Page_Load(object sender, EventArgs e)<br /> {<br /> }<br /> protected void Button1_Click(object sender, EventArgs e)<br /> {<br /> localhost.Workflow1_WebService ws = new WebApplication.localhost.Workflow1_WebService();<br /> this.Label1.Text = ws.Validate(TextBox1.Text);<br /> }<br /> }<br />}

前台代碼:

<body><br /> <form id="form1" runat="server"><br /> <p>輸入“xuwei”點擊確定則顯示成功,輸入其他點擊確定按鈕則顯示失敗</p><br /> <div><br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> </div><br /> <div><br /> <asp:Button ID="Button1" runat="server" Text="確定" onclick="Button1_Click" /><br /> </div></p><p> <div><br /> <asp:Label ID="Label1" runat="server"></asp:Label><br /> </div><br /> </form><br /></body>

運行結果如所示

案例2

參考WF (Windows Workflow Foundation) 工作流程學習(二)一個Asp.Net與順序工作流程結合的例子

步驟1

在WfAndAspNet解決方案中添加asp.net web應用程式AspNet以及一個順序工作流程庫SequenceWorkflowLibrary

步驟2

為AspNet應用程式添加順序工作流程庫SequenceWorkflowLibrary的引用以及對workflow程式集的引用,如所示

步驟3

向Web.Config 中加入WF的註冊。

<?xml version="1.0"?><br /><configuration><br /><configSections><br /><!--WF註冊服務--><br /><section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/><br /><!--結束WF註冊服務--><br /></configSections><br /><!--WF註冊服務--><br /><WorkflowRuntime Name="WorkflowServiceContainer"><br /><Services><br /><add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/><br /><add type="System.Workflow.Runtime.Hosting.DefaultWorkflowCommitWorkBatchService, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/><br /></Services><br /></WorkflowRuntime><br /><!--結束WF註冊服務--><br /><appSettings/><br /><connectionStrings/></p><p></configuration><br /> 

步驟4

添加一個全域Global.asax 檔案,添加如下代碼

namespace AspNet<br />{<br /> public class Global : System.Web.HttpApplication<br /> {<br /> //負責wf在asp.net下的寄宿工作。<br /> protected void Application_Start(object sender, EventArgs e)<br /> {<br /> //讀取web.config中的配置資訊來建立執行個體<br /> //<section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /><br /> WorkflowRuntime workflowRuntime = new WorkflowRuntime("WorkflowRuntime");<br /> workflowRuntime.StartRuntime();//啟動工作流程運行時<br /> //指定當前工作流程運行時<br /> Application["WorkflowRuntime"] = workflowRuntime;<br /> }<br /> protected void Session_Start(object sender, EventArgs e)<br /> {<br /> //擷取應用程式的目前狀態。<br /> WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;<br /> //關閉工作流程運行時<br /> workflowRuntime.StopRuntime();<br /> }<br /> }<br />} 

步驟5

向SequenceWorkflowLibrary中的workflow1.cs中添加一個代碼活動,如所示

雙擊代碼活動,添加該活動所對應的代碼

namespace SequenceWorkflowLibrary<br />{<br /> public sealed partial class Workflow1 : SequentialWorkflowActivity<br /> {<br /> public string Name { get; set; }<br /> public string Result { get; set; }<br /> public Workflow1()<br /> {<br /> InitializeComponent();<br /> }<br /> private void codeActivity1_ExecuteCode(object sender, EventArgs e)<br /> {<br /> Result = "hello " + Name;<br /> }<br /> }<br />}<br /> 

 

步驟6

前台代碼Default.aspx

<body><br /><form id="form1" runat="server"><br /><div><br /><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /><asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /><br /><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br /></div><br /></form><br /></body> 

後台代碼Default.aspx.cs

namespace AspNet<br />{<br /> public partial class _Default : System.Web.UI.Page<br /> {<br /> string Result = string.Empty;//全域變數<br /> protected void Page_Load(object sender, EventArgs e)<br /> {<br /> }<br /> //按鈕觸發工作流程事件。點擊按鈕以後的工作全部交給工作流程完成。<br /> protected void Button1_Click(object sender, EventArgs e)<br /> {<br /> StartWorkflow();<br /> Label1.Text = Result;<br /> }<br /> private void StartWorkflow()<br /> {<br /> //擷取當前工作流程運行時<br /> WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;<br /> //動態運用ManualWorkflowSchedulerService,以取得不同的Thread作服務<br /> ManualWorkflowSchedulerService scheduler = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;<br /> //載入WorkflowCompleted的事件驅動,這是指工作流程完成以後才會去執行的動作。現在工作流程正在運行,所以還沒有執行。<br /> workflowRuntime.WorkflowCompleted+=new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);<br /> //建立Dictionary工作流程參數<br /> Dictionary<String, Object> wfPara = new Dictionary<string, object>();<br /> //添加屬性值<br /> wfPara.Add("Name", TextBox1.Text);<br /> //建立工作流程執行個體,並傳遞參數給工作流程執行個體。<br /> WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(SequenceWorkflowLibrary.Workflow1),wfPara);<br /> //啟動工作流程執行個體<br /> workflowInstance.Start();<br /> //調度工作流程執行個體,並發布該工作流程<br /> scheduler.RunWorkflow(workflowInstance.InstanceId);<br /> }<br /> //WorkflowCompleted的事件驅動<br /> void workflowRuntime_WorkflowCompleted(object sender,WorkflowCompletedEventArgs e)<br /> {<br /> if(e.OutputParameters.ContainsKey("Result"))//如果輸出參數中還有鍵為Result的參數<br /> {<br /> Result=(string)e.OutputParameters["Result"];//則將該鍵所對應的值賦予變數Result<br /> }<br /> }<br /> }<br />}<br /> 

最後程式介面如所示: 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.