Exportar (0) Imprimir
Expandir todo

WorkflowInstance.EnqueueItem (Método)

Actualización: noviembre 2007

Envía un mensaje a la cola del flujo de trabajo especificada sincrónicamente.

Espacio de nombres:  System.Workflow.Runtime
Ensamblado:  System.Workflow.Runtime (en System.Workflow.Runtime.dll)

public void EnqueueItem(
	IComparable queueName,
	Object item,
	IPendingWork pendingWork,
	Object workItem
)
public void EnqueueItem(
	IComparable queueName,
	Object item,
	IPendingWork pendingWork,
	Object workItem
)
public function EnqueueItem(
	queueName : IComparable, 
	item : Object, 
	pendingWork : IPendingWork, 
	workItem : Object
)

Parámetros

queueName
Tipo: System.IComparable
Nombre de WorkflowQueue.
item
Tipo: System.Object
Objeto que se va a poner en cola.
pendingWork
Tipo: System.Workflow.Runtime.IPendingWork
IPendingWorkque permite notificar el remitente cuando se entrega el elemento item.
workItem
Tipo: System.Object
Objeto que se pasará a los métodos IPendingWork.

ExcepciónCondición
ArgumentNullException

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

InvalidOperationException

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

O bien,

WorkflowQueue especificado por queueName no existe.

o

WorkflowQueue especificado por queueNameno está habilitado.

Envía el item al WorkflowQueue especificado. 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.

Al usar este método con un flujo de trabajo del equipo de estado, puede obtener una excepción con el mensaje "La cola '{0}' no está habilitada". Esto sucede cuando el estado actual del equipo de estado no sabe cómo administrar un evento concreto. Por ejemplo, cuando un estado distinto del estado actual contiene la EventDrivenActivity que contiene la HandleExternalEventActivity que está representada por la cola' {0}.'

ms594838.alert_note(es-es,VS.90).gifNota:

No se garantiza que la instancia de flujo de trabajo envíe los mensajes en el orden en que se enviaron. Por ejemplo, si al recibir un mensaje en una cola existente (Cola A) un flujo de trabajo crea otra cola (Cola B) que, a continuación, escucha otros mensaje enviados después del primer mensaje, es posible que el segundo mensaje llegue primero, y que no se reciba debido a que todavía no se ha creado su cola. Para evitar este problema, no se debería enviar el segundo mensaje hasta que se compruebe la presencia de la segunda cola (utilizar GetWorkflowQueueData.)

En el ejemplo de código siguiente se muestra cómo utilizar EnqueueItem. Cuando se produce el evento WorkflowIdled, se llama al método OnWorkflowIdled definido en este ejemplo. Determina qué flujo de trabajo está inactivo utilizando la propiedad WorkflowInstance y, a continuación, obtiene una colección de elementos en cola para la instancia de flujo de trabajo llamando al método GetWorkflowQueueData. El código itera sobre la colección para determinar qué actividad está esperando para el evento que ralentizó el flujo de trabajo. Envía a continuación una excepción a la cola del flujo de trabajo utilizando el método EnqueueItem junto con el nombre del elemento de cola de evento.

Este ejemplo de código forma parte de la muestra de SDK Cancelar un Flujo de trabajo, del archivo Program.cs. Para obtener más información, vea Ejemplo de cancelación de un flujo de trabajo.

static void OnWorkflowIdled(object sender, WorkflowEventArgs e)
{
    WorkflowInstance workflow = e.WorkflowInstance;

    Console.WriteLine("\n...waiting for 3 seconds... \n");
    Thread.Sleep(3000);

    // what activity is blocking the workflow
    ReadOnlyCollection<WorkflowQueueInfo> wqi = workflow.GetWorkflowQueueData();
    foreach (WorkflowQueueInfo q in wqi)
    {
        EventQueueName eq = q.QueueName as EventQueueName;
        if (eq != null)
        {
            // get activity that is waiting for event
            ReadOnlyCollection<string> blockedActivity = q.SubscribedActivityNames;
            Console.WriteLine("Host: Workflow is blocked on " + blockedActivity[0]);

            // this event is never going to arrive eg. employee left the company
            // lets send an exception to this queue
            // it will either be handled by exception handler that was modeled in workflow
            // or the runtime will unwind running compensation handlers and exit the workflow
            Console.WriteLine("Host: This event is not going to arrive");
            Console.WriteLine("Host: Cancel workflow with unhandled exception");
            workflow.EnqueueItem(q.QueueName, new Exception("ExitWorkflowException"), null, null);
        }
    }
}


Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft