Recently I was working on a WCF service in which the requirements included creation of a restful WCF service that an Android application will consume as well as invocation of the same service in a .NET web application. I am assuming here that readers have a basic idea of what a WCF REST service is.

My service returned data in JSON format when I was invoking it from mobile applications. It was working fine but in .NET applications I was using an ajax call via jQuery; it was giving the error "Cross Platform Invocation". I tried with JSONP too but as expected that did not work either so I decided to call it from the C# code I am providing and explaining here.

My service contract has one GET Request function returning a class in JSON format that is as follows:

[OperationContract]

[WebGetAttribute(UriTemplate = "/Track/{Sno}",

BodyStyle = WebMessageBodyStyle.WrappedRequest,

RequestFormat = WebMessageFormat.Json,

ResponseFormat = WebMessageFormat.Json)]

Tracker Track(string Sno)

And my data contract Tracker class is as follows:

[DataContract]

public class Tracker

{

[DataMember]

public string Origin { get; set; }

[DataMember]

public string Destination { get; set; }

[DataMember]

public string NumberPiece { get; set; }

[DataMember]

public string GrossWeight { get; set; }

[DataMember]

public string VolumeWight { get; set; }

[DataMember]

public string ChargableWeight { get; set; }

[DataMember]

public string ConsigneeName { get; set; }

[DataMember]

public string ShipperName { get; set; }

}

The logic is simple in the service class function based on the sno I was executing a query in the database binding it to the class and returning it.

Until now we have talked about the service. From here the actual game starts. In the calling application I made a class and declared a field, Sno, that will be sent to the service.

public class WebTracking

{

public string Sno { get; set; }

}

Now, since the service is returning a class with string values, to receive it I made one more class and declared all the fields that I declared in the Tracker class of the service as in the following:

public class ResponseObj

{

public string Origin { get; set; }

public string Destination { get; set; }

public string NumberPiece { get; set; }

public string GrossWeight { get; set; }

public string VolumeWight { get; set; }

public string ChargableWeight { get; set; }

public string ConsigneeName { get; set; }

public string ShipperName { get; set; }

}

Now to call the service and receive the data. Let's make one more class here with one function as in the following:

public class TrackingRequest

{

public ResponseObj GetTracking(WebTracking info)

{

ResponseObj recoveredList = null;

string uri = "http://localhost/Tracking/Track.svc/TrackShipment/" + info.Sno;

HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest;

req.KeepAlive = false;

req.Method = "GET";

HttpWebResponse resp = req.GetResponse() as HttpWebResponse;

Encoding enc = System.Text.Encoding.GetEncoding(1252);

StreamReader loResponseStream = new StreamReader(resp.GetResponseStream(), enc);

string Response = loResponseStream.ReadToEnd();

JavaScriptSerializer serializer = new JavaScriptSerializer();

recoveredList = serializer.Deserialize<ResponseObj>(Response);

loResponseStream.Close();

resp.Close();

return recoveredList;

}

}


Since the service is on a local IIS and the method is of a GET REQUEST type I am sending the parameter in the URL,calling the service with HTTP WEBREQUEST and receiving the response in a HTTP WEB RESPONSE object. In the next step I am reading the response stream into a stream reader object and converting it into the string. Until now the exact JSON string is retrieved. Now to convert this JSON string into the Class response object I deserialize it and assigned it to the ResponseObject's object and returned it.

Call it from the page as in the following:

WebTracking wt=new WebTracking();

Wt.Sno="30";

ResponseObj Obj=new ResponseObj();

TrackingRequest Tr=new TrackingRequest();

Obj=Tr. GetTracking(wt);

In the next article I will explain how to POST data to the service and receive the response .