0

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

4

2 回答 2

2

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

于 2012-02-15T17:47:24.213 回答
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

这与实现 IworkflowCreation 契约的名为 WorkflowCreationEndpoint 的 WF 示例中可用的动态端点相结合。

[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);
}
于 2012-02-20T14:23:02.427 回答