WorkflowRuntime.ServicesExceptionNotHandled Evento

Definizione

Si verifica quando un servizio derivato dalla classe WorkflowRuntimeService chiama il metodo RaiseServicesExceptionNotHandledEvent(Exception, Guid).

public:
 event EventHandler<System::Workflow::Runtime::ServicesExceptionNotHandledEventArgs ^> ^ ServicesExceptionNotHandled;
public event EventHandler<System.Workflow.Runtime.ServicesExceptionNotHandledEventArgs> ServicesExceptionNotHandled;
member this.ServicesExceptionNotHandled : EventHandler<System.Workflow.Runtime.ServicesExceptionNotHandledEventArgs> 
Public Custom Event ServicesExceptionNotHandled As EventHandler(Of ServicesExceptionNotHandledEventArgs) 
Public Event ServicesExceptionNotHandled As EventHandler(Of ServicesExceptionNotHandledEventArgs) 

Tipo evento

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare una funzionalità WorkflowRuntime da un host del flusso di lavoro. Il codice associa ServicesExceptionNotHandled a un gestore eventi, un metodo denominato OnExceptionNotHandled.

Questo esempio di codice fa parte dell'esempio di servizio di persistenza personalizzata.

static void Main()
{
    using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
    {
        try
        {
            // engine will unload workflow instance when it is idle
            workflowRuntime.AddService(new FilePersistenceService(true));

            workflowRuntime.WorkflowCreated += OnWorkflowCreated;
            workflowRuntime.WorkflowCompleted += OnWorkflowCompleted;
            workflowRuntime.WorkflowIdled += OnWorkflowIdle;
            workflowRuntime.WorkflowUnloaded += OnWorkflowUnload;
            workflowRuntime.WorkflowLoaded += OnWorkflowLoad;
            workflowRuntime.WorkflowTerminated += OnWorkflowTerminated;
            workflowRuntime.ServicesExceptionNotHandled += OnExceptionNotHandled;

            workflowRuntime.CreateWorkflow(typeof(PersistenceServiceWorkflow)).Start();

            waitHandle.WaitOne();
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception \n\t Source: {0} \n\t Message: {1}", e.Source, e.Message);
        }
        finally
        {
            workflowRuntime.StopRuntime();
            Console.WriteLine("Workflow runtime stopped, program exiting... \n");
        }
    }
}
Shared Sub Main()

    Using currentWorkflowRuntime As New WorkflowRuntime()
        Try

            ' engine will unload workflow instance when it is idle
            currentWorkflowRuntime.AddService(New FilePersistenceService(True))

            AddHandler currentWorkflowRuntime.WorkflowCreated, AddressOf OnWorkflowCreated
            AddHandler currentWorkflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted
            AddHandler currentWorkflowRuntime.WorkflowIdled, AddressOf OnWorkflowIdled
            AddHandler currentWorkflowRuntime.WorkflowUnloaded, AddressOf OnWorkflowUnloaded
            AddHandler currentWorkflowRuntime.WorkflowLoaded, AddressOf OnWorkflowLoaded
            AddHandler currentWorkflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated
            AddHandler currentWorkflowRuntime.ServicesExceptionNotHandled, AddressOf OnExceptionNotHandled

            currentWorkflowRuntime.CreateWorkflow(GetType(PersistenceServiceWorkflow)).Start()

            waitHandle.WaitOne()

        Catch e As Exception
            Console.WriteLine("Exception \n\t Source: 0} \n\t Message: 1}", e.Source, e.Message)
        Finally
            currentWorkflowRuntime.StopRuntime()
            Console.WriteLine("Workflow runtime stopped, program exiting... \n")
        End Try
    End Using
End Sub

Commenti

Un servizio derivato dalla classe WorkflowRuntimeService può chiamare il metodo RaiseServicesExceptionNotHandledEvent per informare i sottoscrittori dell'evento ServicesExceptionNotHandled che si è verificata un'eccezione non gestibile durante l'esecuzione. È possibile sottoscrivere questo evento per implementare un meccanismo di ripristino.

Questo evento viene generato quando un'istanza del flusso di lavoro non è ancora stata creata dal motore di runtime del flusso di lavoro e si verifica un'eccezione. In questo scenario, l'unico modo per informare un'applicazione host che si è verificata un'eccezione è generare questo evento. Tuttavia, il motore di runtime del flusso di lavoro non esegue direttamente questa operazione, bensì recapita un'eccezione all'istanza del flusso di lavoro o, se non sono disponibili istanze, rimanda di nuovo al chiamante che, in questo caso, è il servizio che genera questo evento. Se si crea un servizio di persistenza o Utilità di pianificazione, è necessario implementare questo evento tramite il metodo di base RaiseServicesExceptionNotHandledEvent.

Per l'evento ServicesExceptionNotHandled, il mittente contiene WorkflowRuntime e WorkflowEventArgs contiene il Guid dell'istanza del flusso di lavoro che stava utilizzando il servizio e la Exception che non è stato possibile gestire.

Per altre informazioni sulla gestione degli eventi, vedere Gestione e generazione di eventi.

Si applica a