Udostępnij za pośrednictwem


WorkflowInstance.EnqueueItemOnIdle Metoda

Definicja

Wysyła komunikat do określonej kolejki przepływu pracy, gdy przepływ pracy jest bezczynny. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) oczekuje, aż przepływ pracy osiągnie bezczynny punkt i kolejkuje po sprawdzeniu, czy harmonogram przepływu pracy jest bezczynny (oznacza to, że nie jest wykonywana żadna aktywna operacja).

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)

Parametry

queueName
IComparable

Nazwa elementu WorkflowQueue.

item
Object

Obiekt do kolejkowania.

pendingWork
IPendingWork

Element IPendingWork , który umożliwia nadawcy powiadomienie, gdy item zostanie dostarczony.

workItem
Object

Obiekt, który ma zostać przekazany do IPendingWork metod.

Wyjątki

queueNamejest odwołaniem o wartości null (Nothing w Visual Basic).

Aparat środowiska uruchomieniowego przepływu pracy nie jest uruchomiony.

-lub- Wystąpienie przepływu pracy jest zawieszone.

-lub- Określony WorkflowQueue przez queueName nie istnieje.

-lub- Określony WorkflowQueue przez queueName nie jest włączony.

Przykłady

W poniższym przykładzie pokazano wysyłanie informacji do wystąpienia przepływu pracy przy użyciu EnqueueItemOnIdle metody . Najpierw jest tworzony i uruchamiany obiekt WorkflowInstance; następnie tworzony jest obiekt, który implementuje IPendingWork interfejs. EnqueueItemOnIdle Element jest następnie wywoływany, przekazując wartości ciągu dla nazwy kolejki, element w kolejce i element roboczy, który ma zostać przekazany do metod obiektu 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")

Uwagi

Oczekuje, aż wystąpienie przepływu pracy stanie się bezczynne, a następnie wysyła element item do określonego WorkflowQueueelementu . Jeśli wywołasz EnqueueItemOnIdle wywołanie podczas wstrzymania wystąpienia przepływu pracy, aparat środowiska uruchomieniowego przepływu pracy zgłosi błąd InvalidOperationException. Jeśli chcesz zostać powiadomiony o dostarczeniu komunikatu, możesz zaimplementować IPendingWork w usłudze i przekazać workItem obiekt i IPendingWork do EnqueueItemelementu . Jeśli takie powiadomienie nie jest pożądane, możesz przekazać odwołanie o wartości null (Nothingw Visual Basic) dla pendingWork elementów i workItem.

Jeśli używasz tej metody z przepływem pracy maszyny stanu, może zostać wyświetlony wyjątek zawierający komunikat "Kolejka "{0}" nie jest włączona. Dzieje się tak, gdy bieżący stan maszyny stanu nie wie, jak obsłużyć określone zdarzenie. Jeśli na przykład jakiś stan inny niż bieżący zawiera wartość , która zawiera EventDrivenActivity HandleExternalEventActivity element reprezentowany przez kolejkę "{0}".

Dotyczy