Condividi tramite


WorkflowInstance.GetWorkflowQueueData Metodo

Definizione

Ottiene una raccolta di oggetti WorkflowQueueInfo che contiene gli elementi in sospeso e le attività sottoscritte per le code del flusso di lavoro associate a questa istanza del flusso di lavoro.

public:
 System::Collections::ObjectModel::ReadOnlyCollection<System::Workflow::Runtime::WorkflowQueueInfo ^> ^ GetWorkflowQueueData();
public System.Collections.ObjectModel.ReadOnlyCollection<System.Workflow.Runtime.WorkflowQueueInfo> GetWorkflowQueueData ();
member this.GetWorkflowQueueData : unit -> System.Collections.ObjectModel.ReadOnlyCollection<System.Workflow.Runtime.WorkflowQueueInfo>
Public Function GetWorkflowQueueData () As ReadOnlyCollection(Of WorkflowQueueInfo)

Restituisce

ReadOnlyCollection<T> di oggetti WorkflowQueueInfo.

Eccezioni

Il motore di runtime del flusso di lavoro non è in esecuzione.

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare il metodo GetWorkflowQueueData per ottenere informazioni sullo stato di tutte le code del flusso di lavoro associate a un oggetto WorkflowInstance. Quando si verifica l'evento WorkflowIdled viene chiamato il metodo OnWorkflowIdled definito in questo esempio. Determina quale flusso di lavoro venga reso inattivo mediante la proprietà WorkflowInstance e quindi ottiene una raccolta di elementi in coda per l'istanza del flusso di lavoro chiamando il metodo GetWorkflowQueueData. Il codice scorre la raccolta per determinare quale attività è in attesa dell'evento che ha sospeso il flusso di lavoro. Invia quindi un'eccezione alla coda del flusso di lavoro mediante il metodo EnqueueItem insieme al nome dell'elemento in coda dell'evento.

Questo esempio di codice fa parte dell'esempio SDK Canceling a Workflow nel file Program.cs. Per altre informazioni, vedere Annullamento di un flusso di lavoro.

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);
        }
    }
}
Shared Sub OnWorkflowIdled(ByVal sender As Object, ByVal e As WorkflowEventArgs)
    Dim workflow As WorkflowInstance = e.WorkflowInstance

    Console.WriteLine(vbCrLf + "...waiting for 3 seconds... " + vbCrLf)
    Thread.Sleep(3000)

    ' what activity is blocking the workflow
    Dim wqi As ReadOnlyCollection(Of WorkflowQueueInfo) = workflow.GetWorkflowQueueData()
    For Each q As WorkflowQueueInfo In wqi

        Dim eq As EventQueueName = TryCast(q.QueueName, EventQueueName)

        If eq IsNot Nothing Then
            ' get activity that is waiting for event
            Dim blockedActivity As ReadOnlyCollection(Of String) = 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"), Nothing, Nothing)
        End If
    Next
End Sub

Commenti

GetWorkflowQueueData restituisce una raccolta di oggetti WorkflowQueueInfo, ognuno dei quali contiene informazioni sullo stato di una delle code del flusso di lavoro associate a questa istanza del flusso di lavoro. WorkflowQueueInfo.Items contiene gli elementi in sospeso per un oggetto WorkflowQueue e WorkflowQueueInfo.SubscribedActivityNames contiene un elenco delle attività sottoscritte per il recapito di elementi su un oggetto WorkflowQueue.

Si applica a

Vedi anche