首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF 從入門到精通(第八章):呼叫外部方法與工作流(一)

     編輯:關於.NET

本章將介紹如何在工作流與宿主應用程式之間進行本地資料交換。您將學會建立外部資料服務、定義通訊介面、使用 wca.exe 產生活動,並實作雙向資料傳輸。

為什麼需要外部通訊?

工作流執行於宿主進程的不同執行緒,若直接共用物件參考會導致多執行緒競爭。WF 提供 ExternalDataService 可插拔服務,透過序列化機制安全地在工作流與宿主間傳遞資料。

架構概覽

  1. 介面定義:標記 [ExternalDataExchange] 的介面,宣告雙向呼叫的方法。
  2. 事件參數類別:繼承 ExternalDataEventArgs,攜帶工作流執行個體 ID,並標記 [Serializable]。
  3. 連接器與服務類別:實作介面,處理佇列與訊息傳遞(Connector 管理狀態,Service 提供給宿主/工作流呼叫)。
  4. 活動產生:使用 wca.exe 針對介面產生 Invoke (發送) 與 HandleExternalEvent (接收) 兩種活動。
  5. 執行階段註冊:將服務加入 WorkflowRuntime 的 ExternalDataService。

範例:機動車資料檢查應用程式

Windows Forms 應用程式,使用者選擇駕駛員後啟動工作流實例,工作流檢索資料並透過事件回傳 DataSet 給宿主顯示於 ListView。

1. 定義服務介面

[ExternalDataExchange]
public interface IMVDataService
{
    void MVDataUpdate(DataSet mvData);
}

2. 事件參數類別

[Serializable]
public class MVDataAvailableArgs : ExternalDataEventArgs
{
    public MVDataAvailableArgs(Guid instanceId) : base(instanceId) { }
}

3. 連接器與服務實作

(程式碼略)Connector 類別管理 WorkflowQueue 狀態;Service 類別實作 IMVDataService,宿主訂閱事件,工作流呼叫 MVDataUpdate 發送資料。

4. 產生活動

wca.exe /interface:IMVDataService /out:MVDataActivities.cs

產生 InvokeMVDataUpdate (工作流呼叫) 與 HandleMVDataAvailable (宿主接收) 活動。

5. 宿主程式碼片段

// 註冊服務
var service = new MVDataService();
workflowRuntime.AddService(service);

// 訂閱事件
service.MVDataAvailable += (sender, e) => {
    DataSet ds = e.MVData; // 取得資料
    // 繫結至 UI
};

注意事項

  • 共用參考型別需注意多執行緒同步,建議傳遞複製品或序列化後的資料。
  • 本章僅示範單向回傳,雙向通訊將於後續章節深入。

圖示

主介面

查詢中介面

結果介面

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved