WorkflowInstance.EnqueueItemOnIdle Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
queueName
jest 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 (Nothing
w 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}".