In previous article, we had discussed about Win Forms validation using VAB adapter. In this article, we will look into WCF adapter.

Create a new WCF Service Library project in VS 2008 and name it as WCFAdapterVAB. Now add the following dlls present in Enterprise Library installation folder:

Now, delete all the existing class files in the project. We need to add DataContract, ServiceContract for Service. Add a class file named as Employee.cs for DataContract with below code:

using Microsoft.Practices.EnterpriseLibrary.Common;

using Microsoft.Practices.EnterpriseLibrary.Validation;

using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

using Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF;

namespace WCFAdapterVAB

{

[DataContract]

public class Employee

{

[DataMember]

public int EmpID { get; set; }

[DataMember]

[StringLengthValidator(1, RangeBoundaryType.Inclusive, 10, RangeBoundaryType.Inclusive, MessageTemplate = "Name must be between 1 and 10.")]

public string EmpName { get; set; }

[DataMember]

public double Salary { get; set; }

[DataMember]

public string EmpMailID { get; set; }

}
}

Add another class named as IEmpService.cs for ServiceContract with below code:

namespace WCFAdapterVAB

{

[ServiceContract]

[ValidationBehavior]

public interface IEmpService

{

[OperationContract]

[FaultContract(typeof(ValidationFault))]

void AddEmployee(Employee objEmp);

[OperationContract]

[FaultContract(typeof(ValidationFault))]

Employee GetEmpDetails([RangeValidator(1,RangeBoundaryType.Inclusive,100, RangeBoundaryType.Inclusive,MessageTemplate="ID should be between 1-100")]int id);

}
}

We need to specify FaultContract property for methods throwing validation errors.

Now, we will implement the service methods in another class file named as EmpService.cs with below code:

namespace WCFAdapterVAB

{

public class EmpService : IEmpService

{

#region IEmpService Members

private List<Employee> empList = new List<Employee>();

public void AddEmployee(Employee objEmp)

{

empList.Add(objEmp);

}

public Employee GetEmpDetails(int id)

{

return empList.Find(e => e.EmpID.ToString().Equals(id.ToString()));

}

#endregion

}
}

Here, we are validating parameter range for GetEmpDetails and attribute-based validation on EmpName.

Build the solution and run/deploy the service. Now, we need to create a client for testing this service. So, create a new console application and name it as WCFAdapterVABClient. Add service reference of the WCFAdapterVAB and write the below code in Program.cs:

using Microsoft.Practices.EnterpriseLibrary.Validation;

using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

using Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF;

using System.ServiceModel;

namespace WCFAdapterVABClient

{

class Program

{

static void Main(string[] args)

{

try

{

EmpService1.EmpServiceClient service1 = new
WCFAdapterVABClient.EmpService1.EmpServiceClient();

EmpService1.Employee objemp =
new
WCFAdapterVABClient.EmpService1.Employee();

objemp.EmpID = 15;

objemp.EmpName = "c-sharpcorner";

service1.AddEmployee(objemp);

EmpService1.Employee emp = service1.GetEmpDetails(15);

EmpService1.Employee objemp1 = service1.GetEmpDetails(150);

}

catch (FaultException<ValidationFault> ex)

{

ValidationFault fault = ex.Detail;

foreach (ValidationDetail validationResult in fault.Details)

{

Console.WriteLine(validationResult.Message);

}

Console.ReadLine();

}

}

}

}

Run the client application, the output will be like this:

Suggestion:

When we debug WCF service having VAB validation, sometimes we may get unhandled user exceptions; to handle that goto VS Debug Exceptions Uncheck User-unhandled checkbox under CLR Exceptions for ServiceModel and other required classes.

I am ending the things here. I am attaching source code for reference. In coming articles, we will go deep into this Application block. I hope this article will be helpful for all.

Continue to next part >>