Wednesday 27 March 2013

WCF Lesson 3:-Message Contract in WCF


Message Contract in WCF

Earlier we discuss two contract i.e. service contract and data contract. Now in this article I will discuss message contract.

In message contract data is sent in the format of SOAP message which in the form of header and body. With the help of message header we can implement security by passing credential in header part.

For Example:-

Create wcf service and add class to implement message contract.

[MessageContract]
public class EmployeeRecord
{
    [MessageHeader]
    public string token;

   
    [MessageBodyMember]
    public string name;
  
   [MessageBodyMember]
    public int empid;
}


Now create contract and create method in it which takes the EmployeeRecord object as input and return the same

[ServiceContract]
public interface ITechAltum
{
    [OperationContract]
    EmployeeRecord EmpData(EmployeeRecord er);
   
}

Now implement it in the class.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class TechAltum:ITechAltum
{
   public EmployeeRecord EmpData(EmployeeRecord er)
    {

        if (er.token == "1234")
        {
            er.empid = 101;
            er.name = "Isha";
       
        }
        return er;
    }

}

As you can see that it check the token, if token is valid then it assign information in the same class.
Now implement it in the client side.

as we know that in the method it takes EmpRecord types as input and it returns it same as output. But at client side we will work on Ref parameter in this case which is shown as follows:-



Figure 1
As you can see it shows that this method is void type. So we will pass input as ref type parameter.

For Example:-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ServiceReference1.TechAltumClient svctech = new ServiceReference1.TechAltumClient();
        ServiceReference1.EmployeeRecord empRec = new ServiceReference1.EmployeeRecord();

        empRec.token = "1234";
        //we pass input as ref type
        svctech.EmpData(ref empRec.token, ref empRec.empid, ref empRec.name);

        Response.Write(empRec.empid + "   " + empRec.name);

    }
}

Similarly if we do not pass any input parameter to the service in that case we pass these data as out parameter.

For Example:-

Add another method in your contract which returns the object of EmployeeRecord and not taking any input:-

[ServiceContract]
public interface ITechAltum
{
   
    [OperationContract]
    EmployeeRecord EmpOutData();
}

Now implement it in the class:-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class TechAltum:ITechAltum
{
      public EmployeeRecord EmpOutData()
   {

       EmployeeRecord er = new EmployeeRecord();
       er.empid = 102;
       er.name = "Priya";
       er.token = "P-123";
       return er;
  
  
   }
}

Now see the code at client side:-



Figure 2

As you can see that now its taking input as out and its return type is showing as string. This is message header which is Token and its data type is string. In this case it will return token.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ServiceReference1.TechAltumClient svctech = new ServiceReference1.TechAltumClient();
        ServiceReference1.EmployeeRecord empRec = new ServiceReference1.EmployeeRecord();

        empRec.token=.svctech.EmpOutData(out empRec.empid, out empRec.name);

        Response.Write(empRec.empid + "     "+ empRec.name+ "        " empRec.token);

    }
}

Hope you enjoyed the article.
Note:-if you are not aware about the concept of Ref and Out then kindly study it first.

No comments:

Post a Comment