Как разместить конечный автомат WF4 в качестве службы WCF

Я новичок в WF4. Что я хочу сделать, так это представить конечный автомат WF4 как службу WCF. Я создал конечный автомат. Как я могу выполнить триггеры перехода и изменить статус с помощью WCF. http://channel9.msdn.com/Shows/Workflow-TV/endpointtv-WF4-State-Machine-Hands-On-Lab-Exercise-2 . Это учебник, который я использовал для создания конечного автомата.


person Jayantha Lal Sirisena    schedule 15.02.2012    source источник


Ответы (2)


Я написал пример, который показывает, как это сделать, на странице двери безопасности машины состояний. . В основном вы просто используете пары Send/ReceiveReply в переходах.

person Ron Jacobs    schedule 15.02.2012
comment
Спасибо за руководство. У меня вопрос по вашему образцу. Есть ли смысл размещать сервис в веб-проекте? Мы используем сервер websinc(frozenmountain.com/websync) для вызова служб из silverlight. - person Jayantha Lal Sirisena; 16.02.2012
comment
Файлы XAMLX должны размещаться либо в веб-проекте, либо вы можете самостоятельно разместить их с помощью WorkflowServiceHost. - person Ron Jacobs; 23.02.2012
comment
Итак, вы говорите, что нам не нужно использовать отдельный сервер, такой как websync, для использования служб WF с silverlight. Спасибо за помощь. - person Jayantha Lal Sirisena; 23.02.2012
comment
Рабочие процессы нельзя размещать в Silverlight. Для них требуется среда выполнения .NET, поэтому в этом случае они должны размещаться в другом серверном процессе. - person Ron Jacobs; 24.05.2012

Если вы не хотите отправлять и получать действия, это возможно с некоторой работой. Действия по отправке и получению могут быть сложными для конечных клиентов, занимающихся корреляцией. С другой стороны, было бы намного лучше, если бы для клиента был общий вход, поэтому клиенту не нужно было бы иметь обновленную ссылку на службу, а только определение контракта.

Мы удалили все корреляции и создали общий веб-сервис, который перенаправляется к определенному рабочему процессу 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);
}
person rfcdejong    schedule 20.02.2012