WorkflowInstance.EnqueueItemOnIdle Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Отправляет сообщение в указанную очередь рабочего процесса, когда рабочий процесс находится в состоянии бездействия. Метод EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) ожидает перехода рабочего процесса в состояние бездействия и выполняет постановку в очередь после проверки на бездействие планировщика заданий рабочего процесса (то есть при отсутствии выполнения активных операций).
public:
void EnqueueItemOnIdle(IComparable ^ queueName, System::Object ^ item, System::Workflow::Runtime::IPendingWork ^ pendingWork, System::Object ^ workItem);
public void EnqueueItemOnIdle (IComparable queueName, object item, System.Workflow.Runtime.IPendingWork pendingWork, object workItem);
member this.EnqueueItemOnIdle : IComparable * obj * System.Workflow.Runtime.IPendingWork * obj -> unit
Public Sub EnqueueItemOnIdle (queueName As IComparable, item As Object, pendingWork As IPendingWork, workItem As Object)
Параметры
- queueName
- IComparable
Имя WorkflowQueue.
- item
- Object
Объект для постановки в очередь.
- pendingWork
- IPendingWork
Интерфейс IPendingWork, позволяющий отправителю получать уведомления при доставке элемента item
.
- workItem
- Object
Объект, передаваемый в методы IPendingWork.
Исключения
Параметр queueName
является неопределенной ссылкой (Nothing
в Visual Basic).
Механизм среды выполнения рабочих процессов не работает.
-или- Выполнение экземпляра рабочего процесса приостановлено.
-или-
Очередь WorkflowQueue, заданная именем queueName
, не существует.
-или-
Очередь WorkflowQueue, заданная именем queueName
, не включена.
Примеры
В следующем примере показана отправка данных экземпляру рабочего процесса с помощью метода EnqueueItemOnIdle
. Сначала создается и запускается объект «WorkflowInstance»; затем создается объект, реализующий интерфейс IPendingWork, и предоставляет ему контекст запроса. EnqueueItemOnIdle
затем вызывается, передавая строковые значения имени очереди, помещенного в очередь элемент и рабочий элемент, передаваемые методам объекта pendingWork.
// Create a workflow runtime environment
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
// Create a new instance of the out-of-box SqlWorkflowPersistenceService.
// Use the non-locking constructor, since we're only creating a single Workflow Runtime.
NameValueCollection parameters = new NameValueCollection();
parameters.Add("ConnectionString",
"Initial Catalog=SqlPersistenceService;Data Source=localhost;Integrated Security=SSPI;");
//Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true");
SqlWorkflowPersistenceService persistenceService =
new SqlWorkflowPersistenceService(parameters);
// Add the service to the runtime
workflowRuntime.AddService(persistenceService);
// Create a WorkflowInstance object
WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(Workflow1));
// Start the instance
workflowInstance.Start();
// Create an instance of a class that implements IPendingWork for notification
PendingService pendingWork = new PendingService();
// Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem");
' Create a workflow runtime environment
Dim workflowRuntime As New WorkflowRuntime()
' Create a new instance of the out-of-box SqlWorkflowPersistenceService.
' Use the non-locking constructor, since we're only creating a single Workflow Runtime.
Dim parameters As New NameValueCollection()
parameters.Add("ConnectionString", _
"Initial Catalog=SqlPersistenceServiceData Source=localhostIntegrated Security=SSPI")
'Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true")
Dim persistenceService As _
New SqlWorkflowPersistenceService(parameters)
' Add the service to the runtime
workflowRuntime.AddService(persistenceService)
' Create a WorkflowInstance object
Dim workflowInstance As WorkflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
' Start the instance
workflowInstance.Start()
' Create an instance of a class that implements IPendingWork for notification
Dim pendingWork As New PendingService()
' Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem")
Комментарии
Ожидает, когда экземпляр рабочего процесса перейдет в состояние бездействия, а затем отправляет элемент item
в указанную очередь WorkflowQueue. Если вызвать метод EnqueueItemOnIdle, когда экземпляр рабочего процесса приостановлен, то механизм среды выполнения рабочих процессов вызовет исключение InvalidOperationException. Если необходимо получать уведомления при доставке сообщений, то в службе можно реализовать интерфейс IPendingWork и передавать элемент workItem
и объект IPendingWork в метод EnqueueItem. Если такое уведомление не требуется, то можно передать неопределенную ссылку (Nothing
в Visual Basic) в качестве параметров pendingWork
и workItem
.
При использовании этого метода с рабочим процессом конечного автомата можно получить исключение с сообщением: «Очередь '{0}' не включена». Это происходит, когда текущее состояние конечного автомата не может обработать определенное событие. Например, если какое-либо состояние, отличное от текущего, содержит действие EventDrivenActivity, содержащее действие HandleExternalEventActivity, которое представляется очередью "{0}".