我是WF4的新手。我想要做的是将WF4状态机公开为WCF服务。我创建了状态机。如何使用WCF执行转换触发器并更改状态。 http://channel9.msdn.com/Shows/Workflow-TV/endpointtv-WF4-State-Machine-Hands-On-Lab-Exercise-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);
}