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, которое не удалось обработать.
Дополнительные сведения об обработке событий см. в разделе Обработка и создание событий.