Я новичок в WF4. Что я хочу сделать, так это представить конечный автомат WF4 как службу WCF. Я создал конечный автомат. Как я могу выполнить триггеры перехода и изменить статус с помощью WCF. http://channel9.msdn.com/Shows/Workflow-TV/endpointtv-WF4-State-Machine-Hands-On-Lab-Exercise-2 . Это учебник, который я использовал для создания конечного автомата.
Как разместить конечный автомат WF4 в качестве службы WCF
Ответы (2)
Я написал пример, который показывает, как это сделать, на странице двери безопасности машины состояний. . В основном вы просто используете пары Send/ReceiveReply в переходах.
Если вы не хотите отправлять и получать действия, это возможно с некоторой работой. Действия по отправке и получению могут быть сложными для конечных клиентов, занимающихся корреляцией. С другой стороны, было бы намного лучше, если бы для клиента был общий вход, поэтому клиенту не нужно было бы иметь обновленную ссылку на службу, а только определение контракта.
Мы удалили все корреляции и создали общий веб-сервис, который перенаправляется к определенному рабочему процессу 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);
}