b

Saturday 26 October 2013

How to support multiple formats using query parameter in wcf Rest Service

How to support multiple formats using query parameter in wcf Rest Service

How to get both json and xml formats in WCF Rest Service

1) Create WCF Service application

2) Add interface file+Class file+ .svc file

           Interface file:  interface1.cs
           Class file: class1.cs
           Service file: Service2.svc

3)  interface1.cs


using System.ServiceModel;
using System.ServiceModel.Web;
using System.Runtime.Serialization;

namespace WcfService1
{
[ServiceContract]
    interface Interface1
    {
        [WebGet]
           
        Person GetPerson(String format);
    }


    [DataContract]
    public class Person
    {
        [DataMember] public int id{get;set;}
        [DataMember] public String Name{get;set;}
        [DataMember] public DateTime Dob{get;set;}
    }
}
}

4) Class1.cs


namespace WcfService1
{
    [ServiceBehavior(IncludeExceptionDetailInFaults=true)]
    public class Class1:Interface1
    {
        public Person GetPerson(String format)
        {
            WebOperationContext wc = WebOperationContext.Current;

         
           
                if (format.=="json")
                {
                    wc.OutgoingResponse.ContentType = "application/json";
                    wc.OutgoingResponse.Format = WebMessageFormat.Json;
                }
                else if (format.=="xml")
                {
                    wc.OutgoingResponse.ContentType = "text/xml";
                    wc.OutgoingResponse.Format = WebMessageFormat.Xml;
                }
           
            return new Person { id = 102, Dob = DateTime.Now.AddYears(-40), Name = "Peter"};
        }
    }
}


5) Service2.svc


<%@
    ServiceHost
    Factory="System.ServiceModel.Activation.WebServiceHostFactory"
    Service="WcfService1.Class1"
%>


6) In Web.config

  <system.serviceModel>
    <services>
      <service name="WcfService1.Class1">
        <endpoint binding="webHttpBinding"
                   contract="WcfService1.Interface1"
                   behaviorConfiguration="restBehaviour"
                  ></endpoint>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restBehaviour">
          <webHttp helpEnabled="true" faultExceptionEnabled="true"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

6) Just run   http://localhost:port/Service2.svc

U will get help page


7) How to consume WCF Rest Service JSON format

            Uri uri = new Uri("http://localhost:23454/Service2.svc/GetPerson?format=json");

            WebClient client = new WebClient();
            client.Headers.Add(HttpRequestHeader.ContentType, "application/json");

            Stream jsonSTream=
                client.OpenRead(uri);

            StreamReader reader =
                new StreamReader(jsonSTream);

            String strPerson=reader.ReadToEnd();
            Console.WriteLine(strPerson);
            Console.ReadLine();

JSON OUTPUT:

{"Dob":"\/Date(120135205873-0700)\/","Name":"Peterapplication\/json","id":102}

7) How to consume WCF Rest Service XML format

            Uri uri = new Uri("http://localhost:23454/Service2.svc/GetPerson?format=xml");

            WebClient client = new WebClient();
            client.Headers.Add(HttpRequestHeader.ContentType, "text/xml");

            Stream jsonSTream=
                client.OpenRead(uri);

            StreamReader reader =
                new StreamReader(jsonSTream);

            String strPerson=reader.ReadToEnd();
            Console.WriteLine(strPerson);
            Console.ReadLine();



XML Output:



<Person xmlns="http://schemas.datacontract.org/2004/07/WcfService1" xmlns:i="htt
p://www.w3.org/2001/XMLSchema-instance"><Dob>1973-10-22T03:53:29.6915206-07:00</
Dob><Name>Petertext/xml</Name><id>102</id></Person>

No comments:

Post a Comment