WorkflowRuntime.ServicesExceptionNotHandled Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt ein, wenn ein Dienst, der von der WorkflowRuntimeService-Klasse abgeleitet wird, RaiseServicesExceptionNotHandledEvent(Exception, Guid) aufruft.
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)
Ereignistyp
Beispiele
Das folgende Codebeispiel zeigt, wie Sie die WorkflowRuntime-Funktionalität eines Workflowhosts verwenden können. Der Code ordnet ServicesExceptionNotHandled einem Ereignishandler zu. Bei diesem handelt es sich um die Methode OnExceptionNotHandled
.
Dieses Codebeispiel ist Teil des Beispiels für den benutzerdefinierten Persistenzdienst.
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
Hinweise
Ein von der WorkflowRuntimeService-Klasse abgeleiteter Dienst kann die RaiseServicesExceptionNotHandledEvent-Methode aufrufen, um die Abonnenten des ServicesExceptionNotHandled-Ereignisses darüber zu informieren, dass während der Ausführung eine Ausnahme aufgetreten ist, die nicht behandelt werden konnte. Sie können dieses Ereignis abonnieren, um einen Wiederherstellungsmechanismus zu implementieren.
Dieses Ereignis wird ausgelöst, wenn die Workflowruntime-Engine noch keine Workflowinstanz erstellt hat und eine Ausnahme auftritt. Bei diesem Szenario besteht die einzige Möglichkeit zum Informieren eines Hosts darüber, dass eine Ausnahme aufgetreten ist, im Auslösen dieses Ereignisses. Die Workflowruntime-Engine ruft das Ereignis jedoch nicht direkt auf. Stattdessen liefert die Workflowruntime-Engine entweder eine Ausnahme an die Workflowinstanz oder übergibt den Fall zurück an den Absender, falls keine Instanz vorhanden ist. In diesem Szenario ist dies der Dienst, der das Ereignis auslöst. Wenn Sie einen eigenen Persistenz- oder Planungsdienst erstellen, müssen Sie dieses Ereignis selbst mithilfe der RaiseServicesExceptionNotHandledEvent-Basismethode implementieren.
Beim ServicesExceptionNotHandled-Ereignis enthält der Absender die WorkflowRuntime, und WorkflowEventArgs enthält die Guid der Workflowinstanz, die den Dienst verwendet hat, und die Exception, die nicht verarbeitet werden konnte.
Weitere Informationen zum Behandeln von Ereignissen finden Sie unter Behandeln und Auslösen von Ereignissen.