如何将WF4状态机作为WCF服务托管

时间:2012-02-15 12:39:07

标签: wcf workflow-foundation workflow-foundation-4 state-machine wcf-4

我是WF4的新手。我想要做的是将WF4状态机公开为WCF服务。我创建了状态机。如何使用WCF执行转换触发器并更改状态。 http://channel9.msdn.com/Shows/Workflow-TV/endpointtv-WF4-State-Machine-Hands-On-Lab-Exercise-2。这是我用来创建状态机的教程。

2 个答案:

答案 0 :(得分:2)

我写了一个示例,展示了如何在State Machine Security Door执行此操作。基本上你只需在转换中使用Send / ReceiveReply对。

答案 1 :(得分:0)

如果你不想发送和接收活动,可以通过一些工作来实现。发送和接收活动可能难以为执行相关内容的最终客户编写。 另一方面是,如果客户端有通用入口,那么客户端不需要更新服务引用,只需要合同定义就可以了。

我们删除了所有相关性并创建了一个通用的Web服务,该服务重新路由到特定的xamlx工作流,但不使用发送/接收活动。相反,我们在xamlx工作流程中使用书签。 因此,我们创建了一个自己的活动来接收自定义页面流数据,另一个活动将数据发送回实例。我们遇到的唯一问题。

public interface IWorkflowService
{
    #region State Machine / Pageflow Operations

    [OperationContract]
    IPageflowData Start(IPageflowData pageflowData);

    [OperationContract(Name = "StartWithInputs")]
    IPageflowData Start(IPageflowData pageflowData, IDictionary<string, object> inputs);

    [OperationContract]
    IPageflowData Resume(PageflowCommand command, IPageflowData pageflowData);

    [OperationContract(Name = "ResumeWithExecuteCommand")]
    IPageflowData Resume(string commandName, IPageflowData pageflowData);

    [OperationContract]
    IPageflowData ResumeTo(string stepName, IPageflowData pageflowData);

    #endregion

这与WF样本中可用的动态端点相结合,称为WorkflowCreationEndpoint,实现IworkflowCreation合同。

[ServiceContract(Name = "IWorkflowCreation")]
public interface IWorkflowCreation
{
    [OperationContract(Name = "Create")]
    Guid Create(IDictionary<string, object> inputs);

    [OperationContract(Name = "CreateWithInstanceId", IsOneWay = true)]
    void CreateWithInstanceId(Guid instanceId, IDictionary<string, object> inputs);

    [OperationContract(Name = "ResumeBookmark")]
    void ResumeBookmark(Guid instanceId, string bookmarkName, object bookmarkValue);
}