Freigeben über


WorkflowInstance.GetWorkflowQueueData Methode

Definition

Ruft eine Auflistung von WorkflowQueueInfo-Objekten ab, die die anstehenden Elemente und abonnierten Aktivitäten für die Workflowwarteschlangen enthält, die dieser Workflowinstanz zugeordnet sind.

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)

Gibt zurück

Eine ReadOnlyCollection<T> von WorkflowQueueInfo-Objekten.

Ausnahmen

Die Workflowruntime-Engine wird nicht ausgeführt.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie mithilfe der GetWorkflowQueueData-Methode Informationen zum Zustand aller Workflowwarteschlangen erhalten können, die einem WorkflowInstance-Objekt zugeordnet sind. Wenn das WorkflowIdled-Ereignis eintritt, wird die in diesem Beispiel definierte OnWorkflowIdled-Methode aufgerufen. Sie bestimmt, welcher Workflow mithilfe der WorkflowInstance-Eigenschaft in den Leerlauf versetzt wird, und ruft anschließend eine Auflistung mit in der Warteschlange befindlichen Elementen für den Workflow ab, indem die GetWorkflowQueueData-Methode aufgerufen wird. Der Code durchläuft die Auflistung, um zu ermitteln, welche Aktivität auf das Ereignis wartet, das den Workflow in den Leerlauf versetzt hat. Anschließend sendet er eine Ausnahme an die Workflowwarteschlange, indem er die EnqueueItem-Methode zusammen mit dem Namen des Ereigniswarteschlangenelements verwendet.

Dieses Codebeispiel ist Teil des Canceling a Workflow SDK-Beispiels in der Datei Program.cs. Weitere Informationen finden Sie unter Abbrechen eines Workflows.

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

Hinweise

GetWorkflowQueueData gibt eine Auflistung von WorkflowQueueInfo-Objekten zurück, die Informationen über den Status der Workflowwarteschlangen enthält, die dieser Workflowinstanz zugeordnet sind. WorkflowQueueInfo.Items enthält die anstehenden Elemente für WorkflowQueue und WorkflowQueueInfo.SubscribedActivityNames enthält eine Liste der Aktivitäten, die für die Elementzustellung in einer WorkflowQueue abonniert wurden.

Gilt für:

Weitere Informationen