1

我在 Visual Studio 的 WF4 中设计了一个工作流。它是如此简单,我只想以这种方式执行它。

 using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
 {
     System.Workflow.Runtime.WorkflowInstance instance =  workflowRuntime.CreateWorkflow(typeof(Workflow1));//My workflow
     instance.Start();     
 }

但是当我执行这个我得到以下错误。

The input workflow type must be an Activity.Parameter name: workflowType
4

1 回答 1

2

Technet中有类似的讨论。WorkflowRuntime 类是 Workflow Foundation 3 的一部分,不适用于 WF4 类型。包含它只是为了向后兼容。事实上,在 4.5 WorkflowRuntime 中被标记为过时的。

您可能正在尝试对 WorkflowRuntime 使用基于 System.Activities.Activity 的工作流,这将引发您描述的 ArgumentException 错误。

要托管/运行 WF4 工作流,您应该使用以下类之一:WorkflowInvoker、WorkflowApplication 和 WorkflowServiceHost。这在使用 WorkflowInvoker 和 WorkflowApplication中的文档中进行了描述。

最简单的方法是使用 WorkflowInvoker 将工作流作为方法运行,例如:

Activity wf = new WriteLine
{
    Text = "Hello World."
};

WorkflowInvoker.Invoke(wf);

尽管这并不能让您对工作流的生命周期进行太多控制。

WorkflowApplication为您提供完全控制权,WorkflowServiceHost允许您将工作流托管为 WCF 服务。

事实上,您可以使用 Windows Server AppFabric 托管 WF4 工作流,而无需创建自己的主机,并让 AppFabric 管理实例、安全性和恢复。

于 2012-12-28T11:30:01.097 回答