Introduction: A FaultHandlerActivity is
same as Catch statement in C#. The FaultHandlerActivity has a FaultType
property. This property represents the type of exception we want to catch. If we
set the FaultType property to the System.Exception type, we will handle all CLS-compliant
exceptions. When an exception is raised within a workflow and if the exceptions
is not handled, workflow terminates. When an exception is occurred workflow
check for any FaultHandlers form level to level of the workflow. Levels can be
defined as several sequential workflows etc. If any level has handled the
exception with the FaultHander workflow use that exception handler. otherwise
goes for the termination of the workflow. The FaultHandlerActivity can be used
globally or it can be used for particular sequential workflow. We can use many
FaultHandlerActivities in the workflow and we should specify the
exception that is going to handle.
Step 1 : Open Visual Studio 2010.
- Go to File->New->Project.
- Select Sequential Workflow Console
Application.
When we click the OK option the following
design window opens.
Step 2 : Now we go to Toolbox and drag activity.
Step 3 : Now double-click in
CodeActivity and write the below code.
Code :
private
void codeActivity1_ExecuteCode(object
sender, EventArgs e)
{
int i = 25;
int ee = 5;
int result = (i / ee);
}
Step 4 : To handle the
exception we have to set the fault handlers. We can view the fault handlers by
click in on the context menu in the sequential workflow.
Step 5 : We can select View Fault Handler and drag FaultHandlerActivity from
Toolbox.
Step 6 : We can set the type of the
exception that the FaultHandlingActivity should handle. We can set it by the
properties of the FaultHandlingActivity.
- Right-click in FaulHandlerActivity.
- Select Properties option.
- Define FaultType.
FaultType :
Step 7 : Now again drag CodeActivity
below the FaultHandlerActivity from Toolbox. Here in the codeActivity2 I have
handled the exception by writing the exception message to the console.
Step 8 : Double-click in CodeActivity
and write the below code.
Code :
using System;
using
System.ComponentModel;
using
System.ComponentModel.Design;
using
System.Collections;
using
System.Linq;
using
System.Workflow.ComponentModel.Compiler;
using
System.Workflow.ComponentModel.Serialization;
using
System.Workflow.ComponentModel;
using
System.Workflow.ComponentModel.Design;
using
System.Workflow.Runtime;
using
System.Workflow.Activities;
using
System.Workflow.Activities.Rules;
namespace
WorkflowConsoleApplication4
{
public sealed
partial class
Workflow1 :
SequentialWorkflowActivity
{
public Workflow1()
{
InitializeComponent();
}
private void
codeActivity1_ExecuteCode(object sender,
EventArgs e)
{
int i = 25;
int ee = 5;
int result = (i / ee);
}
private void
codeActivity2_ExecuteCode(object sender,
EventArgs e)
{
FaultHandlerActivity
faultHandlerActivity = ((Activity)sender).Parent
as
FaultHandlerActivity;
if (faultHandlerActivity !=
null)
{
Console.WriteLine(faultHandlerActivity.Fault.Message);
}
Console.ReadLine();
}
}
}
Step 9 : Now we go to
Program.cs file and write the below code.
Code :
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading;
using
System.Workflow.Runtime;
using
System.Workflow.Runtime.Hosting;
namespace
WorkflowConsoleApplication4
{
class Program
{
static void
Main(string[] args)
{
using (WorkflowRuntime
workflowRuntime = new
WorkflowRuntime())
{
AutoResetEvent waitHandle =
new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted +=
delegate(object sender,
WorkflowCompletedEventArgs e) {
waitHandle.Set(); };
workflowRuntime.WorkflowTerminated +=
delegate(object sender,
WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
WorkflowInstance instance =
workflowRuntime.CreateWorkflow(typeof(WorkflowConsoleApplication4.Workflow1));
instance.Start();
waitHandle.WaitOne();
}
}
}
}
Step 10 : Now we Press
F5 and run the application.