2011-01-05 28 views
0

我对工作流4.0和WCF不熟悉,并且正在努力创建一个WCF服务,该服务创建,运行并与不同类型的工作流进行通信。构建一个WCF服务,创建并与4.0中的多个不同工作流进行通信

使用工作流程3.5我能够创建一个漂亮的webservice,创建并销毁不同类型的工作流程,并允许单个界面与不同类型的工作流程交谈。例如,要在3.5创建的给定代码的工作流:(其中,a代码对应于工作流类型)

[WebMethod] 
    public string CreateWorkflow(int code) 
    { 
     WorkflowRuntime runtime = createRuntime(); 
     try 
     { 
      Type type = GetWorkflowType(code); 
      string reply = ""; 
      WorkflowInstance instance = 
       runtime.CreateWorkflow(type); 
      instance.Start(); 
      reply = instance.InstanceId.ToString(); 
      instance.Unload(); 
      return reply; 
     } 
     catch (Exception e) 
     { 
      return e.ToString(); 
     } 
     finally 
     { 
      closeRuntime(runtime); 
     } 
    } 

然后传达给的任何类型的工作流:

  .. 
      WorkflowInstance instance = runtime.GetWorkflow(new Guid(Id)); 
      PassDataEventArgs eve = new PassDataEventArgs(instance.InstanceId, data); 
      InputData(null, eve); 
      .. 

是否可以使用WCF和工作流程4.0呈现这样的界面?我设法使用WCF创建不同类型的工作流,但与他们沟通我不知道如何传递数据。理想情况下,在我的WCF服务上调用诸如passData(Guid id,Object data)之类的方法会将此数据传递给任何类型的工作流实例(如果工作流未处于正确状态以便在此时接收数据)。任何人都可以给我任何见解,我可以如何实现跨单个WCF服务内多个工作流类型的通用通信?

回答

1

IN WF4将工作流作为服务运行的常用方法是使用WorkflowServiceHost。然而,这仅限于每个WorkflowServiceHost的单个工作流定义。如果你想要多个工作流程,你可以使用多个WorkflowServiceHost。

现在,您可以创建一个通用服务来接受所有消息,检查它们并以某些条件为基础将它们传递给正确的WorkflowServiceHost。另一种方法是不使用WorkflowServiceHost,而是使用WorkflowApplication,但这意味着需要编写大量管道代码。