Могу ли я создать рабочий процесс WCF, используя стандартные шаблоны действий рабочего процесса?

Можно ли создать рабочий процесс WCF, используя стандартные (шаблон действия) шаблоны действий рабочего процесса? И если да, то где я могу найти образцы, которые НЕ используют стандартный шаблон службы WCF (шаблон службы рабочего процесса WCF)?

Объяснение: я пытаюсь обнаруживать, загружать и запускать рабочие процессы во время выполнения, включая рабочие процессы с действиями WCF. Стандартные рабочие процессы компилируются в типы (что упрощает их обнаружение), однако шаблон «Служба рабочего процесса WCF» представляет собой файл xamlx, который добавляется как содержимое и загружается как поток манифеста во время выполнения. Это затрудняет обнаружение во время выполнения.

Я не думаю, что использование этого шаблона для создания службы является обязательным, поскольку WorkflowServiceHost может принимать Activity в своем конструкторе.

Я пытаюсь максимально упростить задачу разработки новой службы WCF, которая будет обнаруживаться, загружаться и «выполняться» (т. Е. Загружаться и прослушиваться) во время выполнения.


person Community    schedule 21.07.2010    source источник


Ответы (3)


Я пытался выяснить то же самое со вчерашнего дня, и теперь я наткнулся на обходной путь. В VS 2010 нет шаблона для простого рабочего процесса (xaml) при добавлении нового элемента. Если вы создаете приложение WCF WF, вы получите xamlx. Вместо этого я создал приложение консоли рабочего процесса, которое предоставило мне файл xaml, который я скопировал в свой рабочий проект. Как только это было сделано, хостинг с помощью WorkflowServiceHost стал простым.

        string uri = "http://localhost:8008/MyService"; 
        WorkflowServiceHost wsh = new WorkflowServiceHost(new Workflow1(), new Uri(uri));
        ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior();
        metadataBehavior.HttpGetEnabled = true;
        wsh.Description.Behaviors.Add(metadataBehavior);
        wsh.AddServiceEndpoint("IService", new BasicHttpBinding(), uri);
        wsh.Open();
person Kay Khan    schedule 22.07.2010
comment
Это может показаться нелепым вопросом, но является ли IService в вашем примере настоящим ServiceContract? Я спрашиваю, потому что мне интересно, можно ли вывести контракт из определения рабочего процесса, или мне нужно не только создать рабочий процесс, но и интерфейс, который определяет контракт? - person ; 22.07.2010
comment
Это интерфейс, который виден клиенту из рабочего процесса. Вы можете назвать его как угодно вместо IService, вы можете, но не обязательно, объявлять его в любом файле .cs. В любом случае, как я видел, реальной реализации этого интерфейса нет. Настоящее мясо находится внутри кода активности и того, что возвращается клиенту из контекста активности. У вас должна быть возможность вызывать реализованные контракты из кода с помощью действий. - person Kay Khan; 22.07.2010

Да, это.

Этот блог post описывает, как использовать расширение SVC вместо XAMLX, и использует для этого рабочий процесс компиляции. Комментарии добавляют некоторые детали, как избавиться от файла SVC. Вам нужно использовать WorkflowServiceHostFactory в качестве Factory для подключения. Вы также можете сделать что-то подобное при самостоятельном хостинге.

person Maurice    schedule 22.07.2010
comment
Кому-то помогло, но, черт возьми, многое осталось недосказанным. - person ; 22.07.2010

На самом деле я только что понял, что шаблон «Действия» в добавлении нового элемента - это xaml, поэтому нет необходимости создавать это «Консольное приложение рабочего процесса», чтобы получить файл xaml.

person Kay Khan    schedule 22.07.2010
comment
Технически рабочий процесс аналогичен составному действию, поэтому отдельного нового шаблона рабочего процесса не существует. Единственная разница в том, запускаете ли вы его как есть, то есть как рабочий поток, или повторно используете его в рабочем процессе, превращая его в действие. Довольно часто создается рабочий процесс XAML, тестируется как есть, а затем перетаскивается в службу рабочего процесса XAMLX, чтобы предоставить его через WCF. - person Maurice; 23.07.2010