WF4.0 提供 Interop 活動 (System.Activities.Statements.Interop) 讓開發者在 WF4 流程中直接重用現有 WF3.x 活動 (System.Workflow.Activities.Activity),保護既有資產投資,平滑遷移。
NativeActivity,實作 ICustomTypeDescriptorCacheMetadata、Cancel、Execute、CanInduceIdleActivityType (Type):指定要呼叫的 WF3.x 活動型別ActivityProperties (IDictionary<String, Object>):WF3 活動屬性繫結,自動產生 屬性名 與 屬性名Out 兩個參數ActivityMetaProperties (IDictionary<String, Object>):中繼屬性 (如 Name)



ActivityType 指向 WF3.x 活動型別


WF3.x 活動:擁有 printText 相依屬性,Execute 中列印並修改其值。
protected override ActivityExecutionStatus Execute(ActivityExecutionContext context)
{
Console.WriteLine(this.printText);
this.printText = printText + ":wxd";
return ActivityExecutionStatus.Closed;
}
WF4 工作流:Interop 呼叫上述活動,傳入初始值並輸出修改後值。
執行結果:
var myVar = new Variable<string> { Default = "wxwinter" };
var root = new Sequence
{
Variables = { myVar },
Activities = {
new Interop
{
ActivityType = typeof(MyWf3Activity),
ActivityProperties = {
{ "printText", new InArgument<string>(myVar) },
{ "printTextOut", new OutArgument<string>(myVar) }
},
ActivityMetaProperties = { { "Name", "myActivity" } }
},
new WriteLine { Text = myVar }
}
};
WorkflowInvoker.Invoke(root);
結果:
完整範例代碼:下載連結