Как определить несколько действий приема в одной службе рабочего процесса (WF4)

У меня есть служба рабочего процесса (декларируемая в файле .xamlx), которая в настоящее время содержит одно действие Recieve. Как вы, возможно, знаете, службы обычно предоставляют более одной операции. И это то, что я хотел бы делать со своим сервисом. Как мне добавить в эту услугу дополнительные операции? Без WF это действительно просто. Просто добавьте столько методов, сколько хотите, и украсьте их OperationContract. Затем клиент может вызвать любую из операций, которые предлагает сервис. С другой стороны, в WF4, когда я пытаюсь добавить в службу еще одно действие Recieve, я могу добавить его только до или после существующего действия. Я думал, что могу использовать для этого действие Pick, но я только предполагаю. Вот как я это делаю? Или мне следует добавить еще одну службу рабочего процесса и добавить к ней действие Receive? (совсем не похоже на хорошее решение). Или, может быть, есть правильный способ добиться этого?

P.S Как вы понимаете, я новичок в WF в целом и в WF4 в частности.

Спасибо, Ави


person Avi Shilon    schedule 01.03.2010    source источник


Ответы (1)


Наличие единственного действия Receive в начале рабочего процесса не является редкостью, в конце концов, обычно есть одно событие, которое запускает рабочий процесс. И после запуска он может дождаться получения других сообщений. Однако нет никаких причин, чтобы рабочий процесс не прослушивал несколько разных одновременно, и, как вы упомянули, действие выбора - лучший способ. Просто перетащите Pick на поверхность конструктора, добавьте столько действий PickBrache с Receive, сколько хотите, и все готово.

person Maurice    schedule 02.03.2010
comment
Спасибо, Морис! Эй, погоди, ты Морис, решатель проблем :) Я читаю твой блог, чтобы узнать больше о WF4. Большое спасибо, мой друг. - person Avi Shilon; 02.03.2010
comment
Да, это я :-), парень, тебе нравится блог, скоро будет больше. - person Maurice; 03.03.2010
comment
Хорошо, я сделал это, и это сработало. Но (я не понимал этого раньше) теперь я понимаю, что вы сказали раньше, что довольно часто действие получения запускает рабочий процесс, а другие действия получения прослушивают последующие сообщения. На самом деле это именно мой сценарий. Проблема в том, что теперь у меня есть несколько (три) действий Reveive, которые можно вызывать в любом желаемом порядке. Есть ли способ убедиться, что первый вызов, который может выполнить клиент, будет только для определенного, а последующие вызовы - только для двух других действий приема? Я очень ценю вашу помощь. - person Avi Shilon; 03.03.2010
comment
Добавить первое начало приема запускает рабочий процесс вверху. После отправки ответа добавьте действие выбора и добавьте два других действия получения в любую из ветвей. Теперь рабочий процесс можно возобновить с помощью одного из двух разных сообщений. Если вы хотите принять несколько вызовов, поместите действие Pick внутри действия DoWhile, чтобы повторно активировать Pick and Receive после обработки сообщения. - person Maurice; 03.03.2010
comment
Привет, Морис, у меня есть несколько вопросов: случай 1. Если у меня есть только одно действие ReceiveAndSendRely в моем рабочем потоке, это означает вызов foreach моего рабочего процесса из клиентского приложения, при котором система создает новый экземпляр (новый экземпляр моей службы wokflow). . это правильно? случай 2 - позволяет добавить второе действие ReceiveAndSendRely в предыдущий рабочий процесс (у меня есть 2 действия ReceiveAndSendRely), и у меня есть два клиентских приложения, каждый из которых связан только с одним действием ReceiveAndSendRely. Когда мой первый клиент вызывает первое действие ReceiveAndSendRely, все работает нормально, я получаю ответ, но когда второй - person user731591; 29.04.2011
comment
Я добился того же, используя параллельное действие, и у меня есть одна пара получения и отправки ответа для каждой ветки, и я убедился, что CanCreateInsance верен для всех действий получения в каждой параллельной ветке. - person Sundara Prabu; 08.11.2013