如果您不想发送和接收活动,则可以进行一些工作。对于进行相关工作的最终客户来说,发送和接收活动可能很难编写。
另一方面,如果有一个通用的客户端入口会更好,这样客户端就不需要更新服务引用,而只需要一个合同定义。
我们删除了所有相关性并创建了一个通用 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);
}