1. 程式人生 > >.net WCF WF4.5 狀態機、書簽與持久化

.net WCF WF4.5 狀態機、書簽與持久化

定義 ica 添加 www. syn title setevent new pan

想看源碼請直接翻到最後,使用方式如下圖

技術分享圖片

如果同時需要多個書簽可以直接在需要的位置創建書簽,會認為是同一個實例。

若需要實現的效果是同時需要好幾個部門審核,那麽只要在對應的位置同時創建多個書簽即可。

編寫書簽代碼活動

註意幾個地方,創建書簽需要繼承NativeActivity,隨之要修改的就是Execute的參數類型

如下所有註釋部分

public sealed class BookmarkActivity : NativeActivity
    {
        // 定義一個字符串類型的活動輸入參數
        public InArgument<string> Text { get
; set; } public OutArgument<string> bookMark{get;set;} // 如果活動返回值,則從 CodeActivity<TResult> // 並從 Execute 方法返回該值。 //2.修改上下文類型 protected override void Execute(NativeActivityContext context) { // 獲取 Text 輸入參數的運行時值 string text = context.GetValue(this
.Text); //3.創建書簽並設置書簽恢復會的回調函數 context.CreateBookmark("name", new BookmarkCallback(final)); } //4.重寫CanInduceIdle protected override bool CanInduceIdle { get { return true; } } //5.通過恢復書簽時自動調用此函數來將書簽傳遞給外部變量
protected void final(NativeActivityContext context,Bookmark bookmark,object obj) { Dictionary<string, object> o = (Dictionary<string, object>)obj; context.SetValue(bookMark, context.ActivityInstanceId); }

1.使用WorkflowApplication啟動活動

//與主線程同步
AutoResetEvent syncEvent = new AutoResetEvent(false);

            var act = new Activity1();
            Dictionary<string, object> dictionary = new Dictionary<string, object>();
            dictionary.Add("pic","1");
            WorkflowApplication app = new WorkflowApplication(act, dictionary);
            //運行活動
            app.Run();
            //等待信號
            syncEvent.WaitOne();        

2.持久化的sql路徑

C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en 
技術分享圖片


3.添加程序集

技術分享圖片

技術分享圖片



3.添加引用

using System.Activities.DurableInstancing;

4.在合適位置綁定數據持久化使用的數據庫

SqlWorkflowInstanceStore store =
    new SqlWorkflowInstanceStore(@"Server=DESKTOP-OIGV51O\SQLEXPRESS;database=WFTest;uid=sa;pwd=123");
//綁定數據庫
            app.InstanceStore = store;

到這一步數據庫中便已經能夠查看到數據了,接下來要在需要的位置獲取我們的書簽

5.繼續執行後續步驟

            //繼續執行

            //此處使用數據庫中工作流的ID,而不是使用書簽名
            app.Load(Guid.Parse(textBox2.Text));

            app.ResumeBookmark(textBox1.Text,null);

代碼:下載

上一篇:.net WCF WF4.5

.net WCF WF4.5 狀態機、書簽與持久化