Как разместить конечный автомат 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);
}
Другие вопросы по тегам