WorkflowRuntime.ServicesExceptionNotHandled Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se produce cuando un servicio derivado de la clase WorkflowRuntimeService llama 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
Ejemplos
El ejemplo de código siguiente muestra cómo se puede utilizar la funcionalidad WorkflowRuntime desde un host del flujo de trabajo. El código asocia ServicesExceptionNotHandled a un controlador de eventos, un método denominado OnExceptionNotHandled
.
Este ejemplo de código forma parte del ejemplo de Custom Persistence Service.
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
Comentarios
Un servicio que se deriva de la clase WorkflowRuntimeService puede llamar al método RaiseServicesExceptionNotHandledEvent para informar a los suscriptores al evento ServicesExceptionNotHandled de que se produjo una excepción que no se pudo controlar durante su ejecución. Puede suscribirse a este evento para implementar un mecanismo de recuperación.
Se genera este evento cuando el motor en tiempo de ejecución de flujo de trabajo no ha creado todavía una instancia de flujo de trabajo y se produce una excepción. En este escenario, la única manera de informar a una aplicación host que se produjo una excepción es generar este evento. Sin embargo, el motor en tiempo de ejecución del flujo de trabajo no lo llama directamente. En su lugar, el motor en tiempo de ejecución de flujo de trabajo entrega una excepción a la instancia de flujo de trabajo o, si no hay ninguna instancia, vuelve al llamador, que en este caso es realmente el servicio que dispara este evento. Si crea su propia persistencia o servicio programador, tendrá que implementar este evento usted mismo a través del método base RaiseServicesExceptionNotHandledEvent.
Para el evento ServicesExceptionNotHandled, el remitente contendrá WorkflowRuntime y WorkflowEventArgs contendrá Guid de la instancia de flujo de trabajo que estaba utilizando el servicio y el Exception que no se pudo controlar.
Para obtener más información sobre el control de eventos, consulte Control y generación de eventos.