WorkflowInstance.EnqueueItemOnIdle Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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.