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