WF4 不僅能處理商務邏輯,更能整合多個外部 WebService 為統一介面。開源專案 Dropthings 即採此架構。本文實作一個動態、可定制、通用的 WebService 聚合站台,支援天氣查詢、火車時刻、QQ 在線偵測等服務。
ASPX 端呼叫工作流取得服務參數中繼資料,動態建立 Table/Label/TextBox:
private void CreateControl()
{
if (ViewState["CreateControl"] == null) return;
var workflowParam = new Dictionary<string, object>();
var commandParam = new Dictionary<string, string> {
{"commandName", "getServiceBaseInfo"},
{"serviceName", ddlServiceName.Text}
};
workflowParam.Add("commandParam", commandParam);
var result = WorkflowInvoker.Invoke(new MainFlowChart(), workflowParam);
var services = result["resultString"].ToString().Split(';');
// 解析參數並動態建立表單控制項...
}
Flowchart 包含五大分支:取得服務清單、取得參數中繼資料、呼叫 QQ 服務、呼叫天氣服務、呼叫火車服務。新增服務只需加分支,無需修改 ASPX。
// QQ 在線查詢
var commandParam = new Dictionary<string, string> {
{"commandName", "qqCheckOnline"},
{"QQCode", "394403011"}
};
var result = WorkflowInvoker.Invoke(new MainFlowChart(),
new Dictionary<string, object> {{"commandParam", commandParam}});
// 火車時刻查詢
commandParam = new Dictionary<string, string> {
{"commandName", "trainSchedule"},
{"StartStation", "深圳"},
{"ArriveStation", "上海"},
{"UserID", ""}
};
result = WorkflowInvoker.Invoke(new MainFlowChart(),
new Dictionary<string, object> {{"commandParam", commandParam}});
未來可將流程存放資料庫、發布為 WCF 服務,實現真正的動態 WebService 聚合平台。