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}".

Применяется к