WorkflowInstance.EnqueueItemOnIdle Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Publie un message dans la file d'attente de flux de travail spécifiée lorsque le flux de travail est inactif. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) attend que le flux de travail atteigne un point d'inactivité et se met en file d'attente après avoir vérifié que le programmateur de flux de travail est inactif (autrement dit, aucune opération active n'est exécutée).
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)
Paramètres
- queueName
- IComparable
Nom de l'objet WorkflowQueue.
- item
- Object
Objet à mettre en file d'attente.
- pendingWork
- IPendingWork
IPendingWork autorisant l'expéditeur à être notifié lorsque l'item
est remis.
- workItem
- Object
Objet à passer aux méthodes IPendingWork.
Exceptions
queueName
est une référence Null (Nothing
en Visual Basic).
Le moteur d'exécution de workflow ne s'exécute pas.
ou - L'instance de workflow est interrompue.
ou - La WorkflowQueue spécifiée par
queueName
n'existe pas.ou - La WorkflowQueue spécifiée par
queueName
n'est pas activée.
Exemples
L'exemple suivant présente l'envoi d'informations à une instance de workflow à l'aide de la méthode EnqueueItemOnIdle
. En premier lieu, un objet WorkflowInstance est créé et démarré ; ensuite, un objet qui implémente l'interface IPendingWork est créé. EnqueueItemOnIdle
est ensuite appelé, en passant des valeurs de chaîne pour le nom de la file d’attente, l’élément en file d’attente et l’élément de travail à transmettre aux méthodes de l’objet 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")
Remarques
Attend que l'instance de workflow devienne inactive puis envoie l'item
dans la WorkflowQueue spécifiée. Si vous appelez EnqueueItemOnIdle alors que l'instance de workflow est suspendue, le moteur d'exécution de workflow va lever une InvalidOperationException. Si vous souhaitez être notifié lorsque le message est remis, vous pouvez implémenter IPendingWork dans votre service et passer un workItem
et un objet IPendingWork à EnqueueItem. Si vous ne souhaitez pas telle notification, vous pouvez passer une référence Null (Nothing
en Visual Basic) pour pendingWork
et workItem
.
Lorsque vous utilisez cette méthode avec un flux de travail d’ordinateur d’état, vous pouvez obtenir une exception qui contient le message « File d’attente «{0} n’est pas activé ». Cela se produit lorsque l'état actuel de l'ordinateur d'état ne sait pas comment gérer un événement spécifique. Par exemple, lorsqu'un état autre que l'état actuel contient la EventDrivenActivity contenant la HandleExternalEventActivity représentée par la file d'attente '{0}'.