Поделиться через


WorkflowRuntime.ServicesExceptionNotHandled Событие

Определение

Происходит, когда служба, производная от класса WorkflowRuntimeService, вызывает метод 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) 

Тип события

Примеры

В следующем примере кода показано использование функций класса WorkflowRuntime с узла рабочего процесса. Этот код связывает событие ServicesExceptionNotHandled с обработчиком событий — методом с именем OnExceptionNotHandled.

Этот пример кода является частью примера пользовательской службы сохраняемости.

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

Комментарии

Служба, производная от класса WorkflowRuntimeService, может вызвать метод RaiseServicesExceptionNotHandledEvent для оповещения подписчиков события ServicesExceptionNotHandled о возникновении во время ее выполнения исключения, которое она не смогла обработать. На это событие можно подписаться, чтобы реализовать механизм восстановления.

Это событие происходит при возникновении исключения, когда механизм среды выполнения рабочих процессов еще не создал экземпляр рабочего процесса. В этом сценарии единственным способом уведомления ведущего приложения о возникновении исключения является создание события. Однако механизм среды выполнения рабочих процессов не вызывает его напрямую. Вместо этого механизм среды выполнения рабочих процессов возвращает исключение либо экземпляру рабочего процесса, либо, если экземпляра нет, вызвавшему объекту, который в этом случае фактически является службой, вызывающей данное событие. При создании собственной службы сохраняемости или планирования заданий необходимо реализовать это событие самостоятельно через базовый метод RaiseServicesExceptionNotHandledEvent.

Отправитель события ServicesExceptionNotHandled содержит объект WorkflowRuntime, а объект WorkflowEventArgs содержит тип Guid экземпляра рабочего процесса, который использовал данную службу, и исключение Exception, которое не удалось обработать.

Дополнительные сведения об обработке событий см. в разделе Обработка и создание событий.

Применяется к