У меня есть рабочий процесс .net 4.0, который я размещаю сам (только с WorkflowInstance.Run), и когда я повторно гидратирую рабочий процесс, я хотел бы инициализировать некоторые из его внутренних аргументов, чтобы последующие действия могли использовать эти значения ... Как я могу делать это?
Можно ли вводить значения в аргументы рабочего процесса?
Ответы (2)
используйте аргументы (In / OutArgument) для определения ввода или вывода для рабочего процесса (действия тоже).
вот пример синтаксиса ..
Dictionary <string, object> input = new Dictionary <string, object> ();
input.Add( "UserName" , userName);
input.Add ( "UserName", userName);
WorkflowInstance myInstance = new WorkflowInstance(
new WorkflowConsoleApplication2.Sequence1(),input);
WorkflowInstance myInstance = new WorkflowInstance (
new WorkflowConsoleApplication2.Sequence1 (), input);
на карте рабочего процесса определите входной аргумент, и тогда вы сможете получить доступ к значению аргумента.
Обычно аргументы приводятся в пользу предоставления вашего рабочего процесса до того, как вы начнете выполнять рабочий процесс в первый раз.
Например, у вас может быть InArgument input1, InArgument input2, OutArugment output, и когда вы создаете рабочий процесс, вы передаете все входы, а также переменную для рабочего процесса, в которой хранятся все выходы.
Когда рабочий процесс уже запущен, у него есть аргументы, и он не ожидает, что они изменятся из-за какого-то внешнего фактора. (И в случае, если это вызывает путаницу: обычно он не возобновляет выполнение в начале вашего рабочего процесса - он возобновится с какой-то произвольной закладки посередине.) Так как еще вы могли бы передавать данные в свой рабочий процесс. в середине исполнения?
Здесь я предлагаю взглянуть на действия по обмену сообщениями. Данные поступают в рабочий процесс по значению OutArgument для ReceiveMessage. Как он туда попал? Это было установлено действием получения. Но как действие получения заставило его установить его? Итак, сначала хост службы сообщает о возобновлении действия приема, потому что у него есть сообщение. Затем действие получения говорит: "Какое сообщение я получил?" Никто не помещал в него данные волшебным образом, вместо этого после активации действия он знает, как извлечь данные из очереди.
Надеюсь, вы могли бы использовать эту идею: 1) кто-то хранит данные, необходимые для рабочего процесса 2) среда выполнения или хост службы или что-то еще, что повторно активирует рабочий процесс 3) действия извлекают данные, которые им нужны при запуске (после повторной активации) в качестве модели для ваше решение.