本章將介紹如何在工作流與宿主應用程式之間進行本地資料交換。您將學會建立外部資料服務、定義通訊介面、使用 wca.exe 產生活動,並實作雙向資料傳輸。
工作流執行於宿主進程的不同執行緒,若直接共用物件參考會導致多執行緒競爭。WF 提供 ExternalDataService 可插拔服務,透過序列化機制安全地在工作流與宿主間傳遞資料。
[ExternalDataExchange] 的介面,宣告雙向呼叫的方法。ExternalDataEventArgs,攜帶工作流執行個體 ID,並標記 [Serializable]。wca.exe 針對介面產生 Invoke (發送) 與 HandleExternalEvent (接收) 兩種活動。WorkflowRuntime 的 ExternalDataService。Windows Forms 應用程式,使用者選擇駕駛員後啟動工作流實例,工作流檢索資料並透過事件回傳 DataSet 給宿主顯示於 ListView。
[ExternalDataExchange]
public interface IMVDataService
{
void MVDataUpdate(DataSet mvData);
}
[Serializable]
public class MVDataAvailableArgs : ExternalDataEventArgs
{
public MVDataAvailableArgs(Guid instanceId) : base(instanceId) { }
}
(程式碼略)Connector 類別管理 WorkflowQueue 狀態;Service 類別實作 IMVDataService,宿主訂閱事件,工作流呼叫 MVDataUpdate 發送資料。
wca.exe /interface:IMVDataService /out:MVDataActivities.cs
產生 InvokeMVDataUpdate (工作流呼叫) 與 HandleMVDataAvailable (宿主接收) 活動。
// 註冊服務
var service = new MVDataService();
workflowRuntime.AddService(service);
// 訂閱事件
service.MVDataAvailable += (sender, e) => {
DataSet ds = e.MVData; // 取得資料
// 繫結至 UI
};


