Freigeben über


WorkflowInstance.EnqueueItemOnIdle Methode

Definition

Sendet eine Meldung an die angegebene Workflowwarteschlange, wenn sich der Workflow im Leerlauf befindet. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) wartet, bis der Workflow einen Leerlaufpunkt erreicht, und wird eingereiht, nachdem sichergestellt ist, dass sich der Workflowplaner im Leerlauf befindet (also wenn kein aktiver Vorgang ausgeführt wird).

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)

Parameter

queueName
IComparable

Der Name von WorkflowQueue.

item
Object

Das in die Warteschlange einzureihende Objekt.

pendingWork
IPendingWork

IPendingWork ermöglicht die Benachrichtigung des Absenders, wenn item zugestellt wird.

workItem
Object

Ein an die IPendingWork-Methoden zu übergebendes Objekt.

Ausnahmen

queueName ist ein NULL-Verweis (Nothing in Visual Basic).

Die Workflowruntime-Engine wird nicht ausgeführt.

- oder - Die Workflowinstanz wurde unterbrochen.

- oder - Die WorkflowQueue, die unter queueName angegeben ist, ist nicht vorhanden.

- oder - Die WorkflowQueue, die unter queueName angegeben ist, ist nicht aktiviert.

Beispiele

Das folgende Beispiel zeigt, wie Sie Informationen an eine Workflowinstanz senden, indem Sie die EnqueueItemOnIdle-Methode verwenden. Zuerst wird ein WorkflowInstance-Objekt erstellt und gestartet. Als Nächstes wird ein Objekt erstellt, das die IPendingWork-Schnittstelle implementiert. EnqueueItemOnIdle wird anschließend aufgerufen. Dabei werden Zeichenfolgenwerte für den Warteschlangenamen, das eingereihte Element und die Arbeitsaufgabe übergeben, die an die Methoden des pendingWork-Objekts übergeben werden sollen.

// 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")

Hinweise

Wartet, bis sich die Workflowinstanz im Leerlauf befindet, und sendet item dann an die angegebene WorkflowQueue. Wenn Sie EnqueueItemOnIdle aufrufen, während die Workflowinstanz unterbrochen wird, löst die Workflowruntime-Engine eine InvalidOperationException aus. Wenn Sie benachrichtigt werden möchten, sobald die Meldung zugestellt wird, können Sie IPendingWork in Ihrem Dienst implementieren und ein workItem und ein IPendingWork-Objekt an EnqueueItem übergeben. Wenn Sie diese Benachrichtigung nicht verwenden möchten, können Sie einen NULL-Verweis (Nothing in Visual Basic) für pendingWork und workItem übergeben.

Wenn Sie diese Methode mit einem Zustandscomputerworkflow verwenden, erhalten Sie möglicherweise eine Ausnahme, die die Meldung "Warteschlange '{0}' ist nicht aktiviert" enthält. Dies ist der Fall, wenn der aktuelle Zustand des Statuscomputers nicht über die zur Behandlung eines bestimmten Ereignisses erforderlichen Informationen verfügt. Beispiel: Ein Zustand, der nicht mit dem aktuellen Zustand übereinstimmt, beinhaltet die EventDrivenActivity, die die von der Warteschlange '{0}' dargestellte HandleExternalEventActivity beinhaltet.

Gilt für