Compartir a través de


WorkflowInstance.EnqueueItemOnIdle Método

Definición

Envía un mensaje a la cola del flujo de trabajo especificada cuando el flujo de trabajo está inactivo. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) espera hasta que el flujo de trabajo alcanza un punto inactivo y se pone a la cola después de comprobar que el programador del flujo de trabajo está inactivo (es decir, no se ejecuta ninguna operación activa).

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)

Parámetros

queueName
IComparable

Nombre del objeto WorkflowQueue.

item
Object

Objeto que se va a poner en cola.

pendingWork
IPendingWork

IPendingWorkque permite notificar el remitente cuando se entrega el elemento item.

workItem
Object

Objeto que se pasará a los métodos IPendingWork.

Excepciones

queueName es una referencia nula (Nothing en Visual Basic).

El motor en tiempo de ejecución de flujo de trabajo no está en ejecución.

o bien Se suspende la instancia de flujo de trabajo.

o bien WorkflowQueue especificado por queueName no existe.

o bien WorkflowQueue especificado por queueNameno está habilitado.

Ejemplos

El ejemplo siguiente muestra cómo enviar información a una instancia de flujo de trabajo mediante el método EnqueueItemOnIdle. Primero, un objeto WorkflowInstance se crea y se inicia; después, se creará un objeto que implementa la interfaz IPendingWork. EnqueueItemOnIdle Después, se llama a , pasando valores de cadena para el nombre de la cola, el elemento en cola y el elemento de trabajo que se va a pasar a los métodos del objeto 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")

Comentarios

Espera a que la instancia de flujo de trabajo se vuelva inactiva y, a continuación, envía item al WorkflowQueue especificado. Si usted llama EnqueueItemOnIdle mientras se suspende la instancia de flujo de trabajo, el motor en tiempo de ejecución de flujo de trabajo iniciará InvalidOperationException. Si quiere recibir una notificación cuando se entregue el mensaje, puede implementar IPendingWork en su servicio y pasar workItem y un objeto IPendingWork a EnqueueItem. Si no quiere recibir una notificación, puede pasar una referencia nula (Nothing en Visual Basic) para pendingWork y workItem.

Cuando utilice este método con un flujo de trabajo de equipo de estado, podría obtener una excepción que contiene el mensaje "Cola del mensaje' {0}' no está habilitado." Esto sucede cuando el estado actual del equipo de estado no sabe cómo administrar un evento específico. Por ejemplo, cuando un estado distinto del estado actual contiene la EventDrivenActivity que contiene la HandleExternalEventActivity que está representada por la cola' {0}.'

Se aplica a