Compartilhar via


WorkflowRuntime.ServicesExceptionNotHandled Evento

Definição

Ocorre quando um serviço que é derivado da classe WorkflowRuntimeService chama 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 de evento

Exemplos

O exemplo de código a seguir demonstra como usar WorkflowRuntime a funcionalidade de um host de fluxo de trabalho. O código associa-se ServicesExceptionNotHandled a um manipulador de eventos, um método chamado OnExceptionNotHandled.

Este exemplo de código faz parte do Exemplo de Serviço de Persistência Personalizada.

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

Comentários

Um serviço derivado da WorkflowRuntimeService classe pode chamar o RaiseServicesExceptionNotHandledEvent método para informar os assinantes ao ServicesExceptionNotHandled evento de que uma exceção que ele não pôde manipular ocorreu durante sua execução. Você pode assinar esse evento para implementar um mecanismo de recuperação.

Esse evento é gerado quando uma instância de fluxo de trabalho ainda não foi criada pelo mecanismo de tempo de execução do fluxo de trabalho e ocorre uma exceção. Nesse cenário, a única maneira de informar um aplicativo host de que ocorreu uma exceção é gerar esse evento. No entanto, o mecanismo de tempo de execução do fluxo de trabalho não chama isso diretamente. Em vez disso, o mecanismo de tempo de execução de fluxo de trabalho fornece uma exceção à instância de fluxo de trabalho ou, se não houver nenhuma instância, gera de volta para o chamador, que nesse caso é, na verdade, o serviço que dispara esse evento. Se você criar seu próprio serviço de persistência ou agendador, deverá implementar esse evento por conta própria por meio do método base RaiseServicesExceptionNotHandledEvent .

Para o ServicesExceptionNotHandled evento, o remetente contém o WorkflowRuntime e WorkflowEventArgs contém o Guid da instância de fluxo de trabalho que estava usando o serviço e o Exception que não pôde ser tratado.

Para obter mais informações sobre como lidar com eventos, consulte Manipulando e gerando eventos.

Aplica-se a